5

私はジェネリッククラスを作っていますが、今回はすべて、比較演算子を使ってIComparableを実装した型を使用すると考えました。><と他のすべての比較演算子を有効にするインターフェイスはありますか?

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

答えて

5

いいえオペレータは、インターフェイスで指定することはできません。

Interfacesは、クラスが実装できるプロパティ、メソッド、およびイベント[オペレータではありません]を定義します。

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

言語の中には、シュガーマッピング(例:Scala)がありますが、VB.NETやC#はありません。

6

インターフェイスを実装するのではなく、これはoperator overloadingによって実行されます。だから、より-大きいと小なり比較演算子をオーバーロードするために、例えば、あなたがこのような何かを行うことができます:演算子のオーバーロードがSharedのように定義されているので

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 

、彼らは、インターフェースによって宣言することはできません。 VB.NETのインターフェイスは、インスタンスメンバのみを宣言できます。共有メンバーを宣言することはできません。

+1

それは素晴らしいです、@スティーブン - それが可能だったか分からなかった! +1 –

+2

これは良いヒントですが、ジェネリックで作業しているので、演算子のオーバーロードは解決策ではありません。私は '静的'/'共有'関数はインターフェースの一部ではないことに気がつかなかったが、知っておきたい。 –

+1

@ j.i.h。そうであれば、それは「IComparable」のようなインターフェースのためのものです。それが彼らが存在する理由です。あなたは残念ながら、比較操作を実行するためにインターフェイスを通過するだけです。 –

関連する問題