2010-11-21 128 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