私はジェネリッククラスを作っていますが、今回はすべて、比較演算子を使ってIComparable
を実装した型を使用すると考えました。><と他のすべての比較演算子を有効にするインターフェイスはありますか?
私は.CompareTo()
が機能的に同じ操作を実行できることを知っていますが、比較演算子を実装するインターフェイスが必要であると感じるような気がします。
私はジェネリッククラスを作っていますが、今回はすべて、比較演算子を使ってIComparable
を実装した型を使用すると考えました。><と他のすべての比較演算子を有効にするインターフェイスはありますか?
私は.CompareTo()
が機能的に同じ操作を実行できることを知っていますが、比較演算子を実装するインターフェイスが必要であると感じるような気がします。
いいえオペレータは、インターフェイスで指定することはできません。
Interfacesは、クラスが実装できるプロパティ、メソッド、およびイベント[オペレータではありません]を定義します。
最も近いインターフェイスは、前述のようにIComparable
です。
言語の中には、シュガーマッピング(例:Scala)がありますが、VB.NETやC#はありません。
インターフェイスを実装するのではなく、これは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 –
これは良いヒントですが、ジェネリックで作業しているので、演算子のオーバーロードは解決策ではありません。私は '静的'/'共有'関数はインターフェースの一部ではないことに気がつかなかったが、知っておきたい。 –
@ j.i.h。そうであれば、それは「IComparable」のようなインターフェースのためのものです。それが彼らが存在する理由です。あなたは残念ながら、比較操作を実行するためにインターフェイスを通過するだけです。 –