Voo*_*Voo 5 c# operator-overloading
静态解析重载运算符的原因是什么?这对我来说似乎是一个奇怪的选择 - 我能想到的唯一优势是以一些相当不直观的行为为代价的小的性能提升(但 JIT 有时也可以避免这种情况) - 即我基本上必须将操作员转发给一个虚函数来获得想要的行为。
这是刚刚从 C++ 接管还是有其他一些很好的理由?
请参阅 Eric Lipperts 的文章为什么重载运算符在 C# 中始终是静态的?
相反,当面对潜在的语言功能时,我们应该问自己的问题是“该功能的引人注目的好处是否证明所有成本都是合理的?” 而且成本远远高于设计、开发、测试、记录和维护功能的普通美元成本。还有更微妙的成本,例如,此功能是否会使将来更改类型推断算法变得更加困难?这是否会导致我们进入一个在不引入向后兼容性中断的情况下无法进行更改的世界?等等。
在这种特定情况下,引人注目的好处很小。如果您想在 C# 中拥有一个虚拟分派重载运算符,您可以非常轻松地从静态部分构建一个。[...]
支持基于实例的运算符是可能的,但与使其正常工作所需的努力相比,C# 语言设计者并没有看到巨大的收获。