Odpowiedz

5

Nie. Operatorów nie można określić za pomocą interfejsu.

Interfaces definiować właściwości, metody i zdarzenia [ale nie operatorów], które klasy mogą zaimplementować.

Najbliższy interfejs, jak wspomniano, to IComparable.

Niektóre języki mają więcej mapowania cukru (np. Scala), ale nie VB.NET lub C#.

6

Zamiast implementować interfejs, wykonuje się to przez operator overloading. Tak więc, aby przeładowywać coś większy niż i mniej niż operatorów porównania, na przykład, można zrobić tak:

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 

Od przeciążenia operatora są zdefiniowane jako Shared, nie może być uznana przez interfejs. Interfejsy w VB.NET mogą deklarować tylko członków instancji. Nie mogą zadeklarować wspólnych członków.

+1

To jest NIESAMOWITE, @Steven - nie wiedziałem, że było to możliwe !!! +1 –

+2

To dobra wskazówka, ale przeciążenie operatorów nie jest rozwiązaniem, ponieważ pracuję z lekami generycznymi. Nie zdawałem sobie sprawy, że funkcje 'static' /' Shared' nie mogą być częścią interfejsów, dobrze wiedzieć. –

+1

@ j.i.h. Jeśli tak jest, to właśnie są interfejsy takie jak "IComparable". Dlatego istnieją. Właśnie przeszliście przez interfejs, aby przeprowadzić operację porównania, niestety. –

Powiązane problemy