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

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

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

通过在C#中为您的类实现运算符,您实际上并没有超载运算符。 您只是第一次实施它们。 它们是方法,就像任何其他方法一样,但具有特殊的语法。 您可以调用c = a + b ,而不是调用c = Add(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; 

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

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

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

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

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

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

因为你不喜欢打字,所以不要贬低操作员超载的愚蠢路线。

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

要么

MyThingyList–调用MyThingsList.Clear()。