我在瞎忙,做了一個泛型類,而且這一次我以爲使用了使用比較運算符實現IComparable
的類型。是否有一個接口使<>和所有其他比較運算符?
我知道.CompareTo()
可以在功能上執行相同的操作,但我有一個嘮叨的感覺,必須有一個接口來實現比較運算符。
我在瞎忙,做了一個泛型類,而且這一次我以爲使用了使用比較運算符實現IComparable
的類型。是否有一個接口使<>和所有其他比較運算符?
我知道.CompareTo()
可以在功能上執行相同的操作,但我有一個嘮叨的感覺,必須有一個接口來實現比較運算符。
否。不能通過接口指定操作員。
Interfaces定義類可以實現的屬性,方法和事件[但不是運算符]。
如上所述,最接近的接口是IComparable
。
有些語言有更多的糖映射(如Scala),但不是VB.NET或C#。
而不是通過實現一個接口,這是通過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 –
這是一個很好的提示,但是因爲我正在使用泛型,所以重載操作符並不是解決方案。我沒有意識到'靜態'''共享'功能不能成爲接口的一部分,雖然,很好知道。 –
@ j.i.h。如果是這樣的話,這就是'IComparable'這樣的接口。這就是他們存在的原因。不幸的是,您只需通過界面來執行比較操作。 –