7

私はいじくり回してジェネリッククラスを作成していますが、これまでずっとIComparable、比較演算子を使用して有効に実装された型を使用することを考えていました。

機能的には同じ操作ができることは知って.CompareTo()いますが、比較演算子を実装するインターフェースが必要だと感じています。

4

2 に答える 2

6

これは、インターフェースを実装するのではなく、演算子のオーバーロードによって実現されます。したがって、たとえば、大なり記号と小なり記号の演算子をオーバーロードするには、次のようにします。

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

演算子のオーバーロードはとして定義されているSharedため、インターフェイスで宣言することはできません。VB.NETのインターフェイスは、インスタンスメンバーのみを宣言できます。共有メンバーを宣言することはできません。

于 2013-01-07T18:55:15.220 に答える
5

いいえ。インターフェースを介して演算子を指定することはできません。

インターフェイスは、クラスが実装できるプロパティ、メソッド、およびイベント(演算子は除く)を定義します。

前述のように、最も近いインターフェイスはですIComparable

一部の言語には、より多くのシュガーマッピング(Scalaなど)がありますが、VB.NETやC#にはありません。

于 2013-01-07T18:42:52.560 に答える