2010-11-27 47 views
1

是否有一些接口可以實現,以允許基本比較和數學運算,因爲它是一個整數?允許在我的類的實例上發生數學問題

例如,假設我有下面的類:

Public Class Something 
    Public SomeBigNumber as UInt64 
End Class 

我願做這樣的事情:

Dim SomethingA, SomethingB, SomethingC as New Something 

.... 

If (SomethingA-SomethingB) > SomethingC Then 
    'Do stuff 
End If 

我希望能夠實現一些接口(如即使是它的正確術語),如果可能的話,它將返回類中包含的UInt64用於比較和數學運算。

想法?提前致謝!

回答

4

你正在尋找的是"operator overloading",它允許你爲複雜類型(比如你的類Something)定義比較和數學運算符。

例如,你可以從你的Something類中重載加法和減法運算符是這樣的:

Public Shared Operator +(ByVal val1 As Something, ByVal val2 As Something) As Something 
    ''#(calculate the sum of the two specified values) 
    Return New Something(val1.SomeBigNumber + val2.SomeBigNumber) 
End Operator 

Public Shared Operator -(ByVal val1 As Something, ByVal val2 As Something) As Something 
    ''#(calculate the difference of the two specified values) 
    Return New Something(val1.SomeBigNumber - val2.SomeBigNumber) 
End Operator 

然後你就可以編寫代碼:

Dim newValue As Something = something1 + something2 


你也可以以幾乎完全相同的方式過載比較運算符(大於,小於,等於及其間的所有內容):

Public Shared Operator >(ByVal val1 As Something, ByVal val2 As Something) As Boolean 
    ''#(return True if the first value is larger, False otherwise) 
    Return (val1.SomeBigNumber > val2.SomeBigNumber) 
End Operator 

Public Shared Operator <(ByVal val1 As Something, ByVal val2 As Something) As Boolean 
    ''#(return True if the first value is smaller, False otherwise) 
    Return (val1.SomeBigNumber < val2.SomeBigNumber) 
End Operator 

允許你寫的代碼,如:

If something1 > something2 Then 
    MesssageBox.Show("The first value is larger.") 
Else 
    MessageBox.Show("The second value is larger.") 
End If 

但是請注意,其中一些運營商必須在超載。具體做法是:

  • =<>
  • ><
  • >=<=
  • IsTrueIsFalse
+0

這是我在過去的兩年讀過的最有用的信息回答周。謝謝科迪!你堅定地回答了我的問題。 – Brad 2010-11-27 06:08:07

相關問題