什么';这是一个重载';和';VB.NET中的运算符?

什么';这是一个重载';和';VB.NET中的运算符?,vb.net,operator-overloading,Vb.net,Operator Overloading,因此,谷歌不是一个很好的选择,因为它试图将重载运算符“And”或“or”解析为搜索查询本身的运算符。MSDN也没有提供如何实现重载And运算符的示例,因此我不确定如何为我的项目正确地重载它 有人至少有一个“和”的例子吗?“或”或“Xor”(或任何其他)将是一种奖励。我还不确定是否需要在我的对象中重载这些操作符,因为我仍在构建它们,而且还没有计划超越它们。但是,有一些可能被谷歌编入索引的例子可能有助于挽救许多人的理智。是一篇关于MSDN的文章,解释了VB.NET 2005中的运算符重载,这应该仍然

因此,谷歌不是一个很好的选择,因为它试图将重载运算符“And”或“or”解析为搜索查询本身的运算符。MSDN也没有提供如何实现重载And运算符的示例,因此我不确定如何为我的项目正确地重载它

有人至少有一个“和”的例子吗?“或”或“Xor”(或任何其他)将是一种奖励。我还不确定是否需要在我的对象中重载这些操作符,因为我仍在构建它们,而且还没有计划超越它们。但是,有一些可能被谷歌编入索引的例子可能有助于挽救许多人的理智。

是一篇关于MSDN的文章,解释了VB.NET 2005中的运算符重载,这应该仍然与2010年有关

文章中的
Add
示例(使用文章中定义的
ComplexNumber
类):


逻辑运算符的重载方式与一元运算符或算术运算符的重载方式相同。

我现在想不出这在什么情况下有用,但为了举例,这里有一个覆盖
运算符的示例结构:

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

这给出了一些其他的例子和进一步的解释。

是的,我理解的算术运算。但是和/或/Xor测试其他东西,当处理一个表示各种私有成员和方法的集合(不是文字VB集合)的对象时,我需要了解我将在对象中测试什么,以正确地写出重载的“And”操作符。例如,假设我强制我的对象有一个“required”字段,在这种情况下,该字段必须设置为有效值,对象才能被视为有效。重载的“And”运算符是否会对同一类的第二个对象进行测试并返回布尔结果?@Kumba-这完全取决于对象以及您希望这些运算符如何对其进行操作。对于某些类,甚至定义这些运算符都没有任何意义。@Oded:这就是我的问题所在。没有可靠的示例(即代码)显示在重载And运算符函数中测试什么,这样我就可以查看我的对象并决定是否需要实现这些重载。@Kumba-这是你的代码,你必须决定如何操作它。“没人能替你做决定。”奥德:我想你误解了我问题的意图(或者我说得不够清楚——已经早上6点多了,我已经起床很长时间了)。我正在寻找And运算符如何重载的示例。我知道这是我的代码,但因为没有
运算符重载的完整示例,所以我不确定如何实际实现该重载。这就是MSDN缺少的内容。MSDN在参考页面上有以下内容取代了您放置
返回新foo(val1.Bar和val2.Bar…
)的位置:
插入代码以计算x和y的和。
,这对我没有帮助。我想这是因为我没有接受过正式的.NET培训,但基本上是依靠Google、SO和MSDN来学习构建东西所需的知识。缺少的链接是使用
本身来测试比较对象中的Bar和Baz值。也许这是一些人的常识,但不是每个人。换一种说法,用一个词在它自己的定义中被定义。这在正常的英语思维中是不明智的,所以这就是为什么我没有意识到在重载And运算符中使用
来计算对象的And。@Kumba:这不是实现计算的唯一方法,毫无价值。您必须考虑该操作对于代码中的对象意味着什么,并相应地编写逻辑。值得一提的是,我发现自己很少使用运算符重载,而且我从来没有需要重载逻辑运算符。是的,我现在还不需要重载这些运算符(如果有的话)。但读到重载,我很惊讶MSDN提供的关于逻辑运算符的特定重载的信息是如此之少,这基本上是一个想知道如何在开发过程中找到实现这种重载的案例的案例。这一点,现在它将被永远铭记在谷歌和150亿其他模仿网站中,这将有望帮助一些人在数小时毫无结果的谷歌搜索中摆脱疯狂状态。@Kumba:这很公平。这是一个很好的问题,我的回答是+1。
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