作为刚接触C#的新手,我知道运算符重载的目的和用途,并且我可以看到在某些特定情况下它有时非常优雅,比如通过否定值对象来一次否定所有字段,然而这种事情总是可以用简单、直接的方法来实现。是否有一些标准可供参考,什么时候或者是否应该重载运算符,什么时候应该只使用方法?我没有找到任何类似的东西,所以这只是口味/编程范式/风格的问题吗?
我想使用运算符重载的情况是C#不允许其在扩展方法中使用。重载TimeSpan的operator/和operator*肯定很好,但你不能有扩展运算符。
否则,我认为只有在创建代数类型或(也许)使用链接运算符的新小语言时才有意义(类似于C++输出运算符)。例如,我可以看到围绕运算符的Linq变体很有趣。
p0 = r * u - Axis + origin;
比p0 = Point.Add( Vector.Subtract( Vector.Multiply( r, u ), Axis ), origin );
更易读。除了代数上下文之外,我唯一使用过运算符重载是在编写解析器生成器时,我将|
用作表示备选项(和&
用于表示序列)。 - Kyle