是否有一个接口可以启用> <和所有其他比较运算符?

j.i*_*.h. 5 .net vb.net interface operator-overloading syntactic-sugar

我正在捣乱,制作一个泛型类,而且这一次我想使用IComparable使用比较运算符实现的类型.

我知道.CompareTo()可以在功能上执行相同的操作,但我有一种唠叨的感觉,必须有一个实现比较运算符的接口.

Ste*_*art 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
Run Code Online (Sandbox Code Playgroud)

由于操作符重载被定义为Shared,因此无法通过接口声明它们.VB.NET中的接口只能声明实例成员.他们无法声明共享成员.

  • 这是一个很好的提示,但由于我正在使用泛型,因此超载运算符不是解决方案.我没有意识到`static` /`Shared`函数不能成为接口的一部分,很高兴知道. (2认同)

小智 5

不可以通过接口指定操作员.

接口定义类可以实现的属性,方法和事件[但不定义操作符].

如上所述,最接近的界面是IComparable.

有些语言有更多的糖映射(例如Scala),但没有VB.NET或C#.