5

Sto cazzeggiando, facendo una classe generica, e per tutto questo tempo ho pensato di usare i tipi che hanno implementato IComparable abilitato usando gli operatori di confronto.Esiste un'interfaccia che abilita><e tutti gli altri operatori di confronto?

So che .CompareTo() può eseguire funzionalmente le stesse operazioni, ma ho la sensazione fastidiosa che ci debba essere un'interfaccia che implementa gli operatori di confronto.

risposta

5

N. Gli operatori non possono essere specificati tramite un'interfaccia.

Interfaces definiscono le proprietà, metodi ed eventi [ma non operatori] che le classi possono implementare.

L'interfaccia più vicina, come indicato, è IComparable.

Alcune lingue hanno più mapping di zucchero (ad esempio Scala) ma non VB.NET o C#.

6

Invece di implementare un'interfaccia, ciò avviene tramite operator overloading. Così, sovraccaricare il qualcosa di maggiore e minore di operatori di confronto, per esempio, si potrebbe fare in questo modo:

Public Class MyNumber 
    Public Value As Integer 

    Public Overloads Shared Operator >(ByVal x As MyNumber, ByVal y As MyNumber) As Boolean 
     Return (x.Value > y.Value) 
    End Operator 

    Public Overloads Shared Operator <(ByVal x As MyNumber, ByVal y As MyNumber) As Boolean 
     Return (x.Value < y.Value) 
    End Operator 
End Class 

Dal overload dell'operatore sono definiti come Shared, essi non possono essere dichiarate da un'interfaccia. Le interfacce in VB.NET possono solo dichiarare membri di istanza. Non possono dichiarare membri condivisi.

+1

Questo è FANTASTICO, @Steven - non sapevo che era possibile !!! +1 –

+2

Questo è un buon consiglio, ma sovraccaricare gli operatori non è una soluzione dato che sto lavorando con generici. Non mi rendevo conto che le funzioni 'static' /' Shared' non possono essere parte delle interfacce, ma è bello saperlo. –

+1

@ j.i.h. Se questo è il caso, è a questo che servono le interfacce come "IComparable". Ecco perché esistono. Sfortunatamente, è sufficiente passare attraverso l'interfaccia per eseguire l'operazione di confronto. –