2010-11-21 133 views
4

因此Google不適合查找像「And」或「Or」這樣的重載操作符的示例,因爲它試圖將它們解析爲搜索查詢本身的操作符。 MSDN也沒有提供如何實現重載And操作符的示例,所以我不確定如何正確地爲我的項目重載它。什麼是VB.NET中重載的'And'運算符的例子?

有沒有人有最低的「和」的例子? 「或」或「異或」(或任何其他)將是獎金。我不確定是否需要在我的對象中重載這些運算符,因爲我仍然在構建它們,並且還沒有計劃過。但有這樣的例子可能會被谷歌索引可能有助於節省很多人的理智...

回答

3

你重載在你重載一元或算術運算符相同的方式,邏輯運算符。

我能想到居然在那裏,這將在目前是有用的情況下,但對於例如起見,下面是覆蓋AndOr運營商的樣本結構:

Public Structure Foo 

    Public Shared Operator And(ByVal val1 as Foo, ByVal val2 as Foo) As Foo 
     ''#(calculate the logical And of the two specified values here) 
     Return New Foo(val1.Bar And val2.Bar, val1.Baz And val2.Baz) 
    End Operator 

    Public Shared Operator Or(ByVal val1 as Foo, ByVal val2 as Foo) As Foo 
     ''#(calculate the logical Or of the two specified values here) 
     Return New Foo(val1.Bar Or val2.Bar, val1.Baz Or val2.Baz) 
    End Operator 

End Structure 

MSDN page給出了一些其他的例子和進一步的解釋。

+0

This。這是MSDN缺失的。代替放置'Return New foo(val1.Bar和val2.Bar ...)'的地方,MSDN在引用的頁面上有這樣的內容:'插入代碼來計算和x和y.',這對於我。我想這是因爲我沒有接受過正式的.NET培訓,但基本上依靠Google,SO和MSDN來了解我需要構建的東西。缺少的鏈接是使用'And'本身來測試比較對象中的Bar和Baz值。也許這對一些人來說是常識,但不是每個人。 – Kumba 2010-11-21 11:36:54

+0

另一種說法是,使用在自己的定義中定義的單詞。在正常的英語思維中,這是不明智的,所以這就是爲什麼我沒有使用'And'來計算重載And操作符中的對象的原因。 – Kumba 2010-11-21 11:39:04

+0

@Kumba:這不值得,這不是你可以實現計算的唯一方法。你必須考慮這個操作對你的代碼中的對象意味着什麼,並相應地寫出邏輯。對於它的價值,我發現自己很少使用操作符重載,而且我從未*需要重載邏輯操作符。 – 2010-11-21 11:44:05

1

Here是一篇關於解釋運算符在VB.NET 2005中重載的文章,這應該仍然與2010相關。

的例子爲Add,從文章(使用文章中所定義的ComplexNumber類):

Public Shared Operator +(cn1 As ComplexNumber, _ 
      cn2 As ComplexNumber) As ComplexNumber 

    Dim Result As New ComplexNumber(_ 
         cn1.Real() + cn2.Real(), _ 
         cn1.Imaginary() + cn2.Imaginary()) 

    Return Result 

End Operator 
+0

是的,算術操作我理解。但是和/或/ Xor測試其他東西,並且在處理代表各種私有成員和方法的集合(而不是文字VB集合)的對象時,我需要了解我將在對象中測試的內容以正確寫出重載「和」運營商。例如,假設我強制我的對象具有「必需」字段,因此必須將該字段設置爲有效值,以使該對象被視爲有效。重載的「And」運算符是否會針對同一個類的第二個對象進行測試並返回布爾結果? – Kumba 2010-11-21 11:25:07

+1

@Kumba - 它完全取決於對象以及您希望這些操作員如何操作它。對於某些類,即使_have_這些操作符定義也沒有任何意義。 – Oded 2010-11-21 11:28:15

+0

@Oded:這是我的問題。沒有可靠的示例(即代碼)顯示重載And運算符函數的內部測試內容,因此我可以查看我的對象並決定是否需要實現這些重載。 – Kumba 2010-11-21 11:32:35