是否有一个启用>的界面<和所有其他比较运算符?

时间:2013-01-07 18:39:37

标签: .net vb.net interface operator-overloading syntactic-sugar

我正在捣乱,制作一个通用类,而且这一次我想使用使用比较运算符启用IComparable的类型。

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

2 个答案:

答案 0 :(得分:6)

而不是通过实现接口,这是通过operator overloading完成的。因此,例如,要重载大于和小于比较运算符,您可以执行以下操作:

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中的接口只能声明实例成员。他们不能宣布共享成员。

答案 1 :(得分:5)

没有。无法通过界面指定操作员。

  

Interfaces定义类可以实现的属性,方法和事件[但不是操作符]。

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

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

相关问题