问)为什么 C# 中的运算符重载需要“public”和“static”?
尝试过这篇文章
但是有人可以解释一下作者想说什么吗?
作者以非静态方式对运算符重载的潜在特性进行了简单的成本/收益分析,并得出结论,收益并不能证明成本的合理性:您可以通过分派到一个实例来轻松模仿运算符实例重载的功能。来自静态重载运算符内部的虚拟方法。然而,让您在没有中间虚函数的情况下定义重载运算符的成本是巨大的:
2+c
可能是非法的,而c+2
是可以的)null
参考文献最后,作者指出,他们并没有引入一个会带来很多混乱而没有显着好处的功能,而是选择了一种更简洁的设计,可以扩展以提供可比较的功能级别。
公共是必要的,这样就可以在课堂之外访问。 静态是必要的,因为不在类的实例上调用它。
public class B {
public static B operator+(B b1, B b2) { return b1.Add(b2); }
protected virtual B Add(B b2) { // ...
对于上面的例子,我可以有像
b3 = b1 + b2
这样的代码,这里+运算符不会在类B的任何一个实例上调用,所以它需要是静态的。
希望这有帮助。