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 回答