OR(|),XOR(^),AND(&)重载

时间:2011-11-09 18:22:40

标签: c# .net operator-overloading bitwise-operators

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

我一直试图找到一些好的答案,但没有找到任何答案。我将分享任何有用的文章。

3 个答案:

答案 0 :(得分:3)

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

关于"如何使用它们"基本规则是重载运算符应该在你实现它们的域中有意义......

例如,您可以构建遗传/进化算法,并以与重组/突变相关的方式定义部分/全部按位/二元运算符。该算法的步骤(即从当前群体创建下一代) - 这将在该特定上下文中形成相当优雅的代码。

答案 1 :(得分:1)

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

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

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 :(得分:0)

如何使用它们?小心。 他们需要有意义。 例如。定义一个Type来保存ComplexNumber或Matrix然后重载算术运算符是有意义的。

不要因为你不喜欢打字而忽视操作员超载的愚蠢路线。

e.g。 MyThingyList + SomeFileName从文件中加载MyThingyList。

MyThingyList--调用MyThingsList.Clear()。