2013-01-07 19 views
5

我在瞎忙,做了一個泛型類,而且這一次我以爲使用了使用比較運算符實現IComparable的類型。是否有一個接口使<>和所有其他比較運算符?

我知道.CompareTo()可以在功能上執行相同的操作,但我有一個嘮叨的感覺,必須有一個接口來實現比較運算符。

回答

5

否。不能通過接口指定操作員。

Interfaces定義類可以實現的屬性,方法和事件[但不是運算符]。

如上所述,最接近的接口是IComparable

有些語言有更多的糖映射(如Scala),但不是VB.NET或C#。

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

這真是太棒了,@斯蒂文 - 不知道這是可能的! +1 –

+2

這是一個很好的提示,但是因爲我正在使用泛型,所以重載操作符並不是解決方案。我沒有意識到'靜態'''共享'功能不能成爲接口的一部分,雖然,很好知道。 –

+1

@ j.i.h。如果是這樣的話,這就是'IComparable'這樣的接口。這就是他們存在的原因。不幸的是,您只需通過界面來執行比較操作。 –

相關問題