【发布时间】:2012-12-21 12:56:27
【问题描述】:
我正在做一个泛型类,一直以来我都在考虑使用实现IComparable 的类型,使用比较运算符启用。
我知道.CompareTo()可以在功能上执行相同的操作,但我有一种唠叨的感觉,必须有一个实现比较运算符的接口。
【问题讨论】:
标签: .net vb.net interface operator-overloading syntactic-sugar
我正在做一个泛型类,一直以来我都在考虑使用实现IComparable 的类型,使用比较运算符启用。
我知道.CompareTo()可以在功能上执行相同的操作,但我有一种唠叨的感觉,必须有一个实现比较运算符的接口。
【问题讨论】:
标签: .net vb.net interface operator-overloading syntactic-sugar
这不是通过实现接口,而是通过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 中的接口只能声明实例成员。他们不能声明共享成员。
【讨论】:
static / Shared 函数不能成为接口的一部分,很高兴知道。
IComparable 之类的接口的用途。这就是它们存在的原因。不幸的是,您只是通过界面进行了比较操作。
没有。不能通过接口指定运算符。
Interfaces 定义类可以实现的属性、方法和事件[但不是运算符]。
如前所述,最近的接口是IComparable。
有些语言有更多的糖映射(例如 Scala),但没有 VB.NET 或 C#。
【讨论】:
<、> 和 == 运算符不同,例如涉及 @ 的比较987654326@.