如何重载&,| C#中的^和^运算符以及重载如何工作?
我一直试图找到一些好的答案,但没有找到任何答案。我将分享任何有用的文章。
答案 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()。