首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OR(|)、XOR(^)和(&)重载

OR(|)、XOR(^)和(&)重载
EN

Stack Overflow用户
提问于 2011-11-10 02:22:40
回答 3查看 2K关注 0票数 1

如何在C#中重载&,|和^运算符,以及重载是如何工作的?

一段时间以来,我一直在努力寻找一些好的答案,但一直没有找到。我会分享任何有用的文章。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-10 03:03:04

通过在C#中实现类的运算符,您实际上并没有重载运算符。您只是第一次实现它们。它们是方法,就像任何其他方法一样,但具有特殊的语法。不调用c = Add(a, b),而是调用c = a + b,其中+是返回值的运算符(方法)。

通过实现以下方法,已经自动实现了&=|=^=方法。

代码语言:javascript
复制
public class MyClass
{
    public static MyClass operator &(MyClass left, MyClass right)
    {
        return new MyClass();
    }

    public static MyClass operator |(MyClass left, MyClass right)
    {
        return new MyClass();
    }

    public static MyClass operator ^(MyClass left, MyClass right)
    {
        return new MyClass();
    }
}

var a = new MyClass();
var b = new MyClass();

var c = a & b;
var d = a | b;
var e = a ^ b;

a &= b; // a = a & b;
c |= d; // c = c & d;
e ^= e; // e = e ^ e;

重载是在编译时执行的。它确保根据方法的名称、参数类型和计数来调用特定的方法。

覆盖是在运行时执行的。它允许调用子类的方法而不是父方法,即使实例被视为父类也是如此。

票数 2
EN

Stack Overflow用户

发布于 2011-11-10 02:35:03

有关运算符重载的一些文章/教程/参考资料,包括二进制/位运算符和示例源代码,请参阅:

  • http://www.codeproject.com/KB/cs/introtooperatoroverloads.aspx
  • http://www.dotnetperls.com/operator
  • http://msdn.microsoft.com/en-us/library/aa691324%28v=vs.71%29.aspx
  • http://msdn.microsoft.com/en-us/library/aa288467%28v=vs.71%29.aspx

至于“如何使用它们”,基本规则是重载操作符在实现它们的域中应该是有意义的……

例如,您可以构建一个遗传/进化算法,并以与该算法的“重组/突变”步骤(即从当前种群创建下一代)一致的方式定义部分/所有位/二进制运算符--这将使该特定上下文中的代码相当优雅。

票数 3
EN

Stack Overflow用户

发布于 2011-11-10 02:43:17

如何使用它们?小心点。它们需要有意义。例如,定义一个类型来保存ComplexNumber或矩阵,然后重载算术运算符是有意义的。

不要因为不喜欢打字而走重载操作符的愚蠢路线。

例如,MyThingyList + SomeFileName从文件中加载MyThingyList。

MyThingyList--调用MyThingsList.Clear()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8069665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档