对C#不熟悉,我知道运算符重载的目的和用途,我可以看到它在非常特殊的情况下有时是优雅的,比如否定一个值对象来立即否定所有字段然而,这些事情总是可以通过简单的说话方法来完成。是否有一些标准我可以用作指南,何时或是否重载运算符或何时简单地使用方法?我找不到那样的东西,所以这只是品味/编程范式/风格的问题吗?
答案 0 :(得分:4)
这是我发现操作员重载任何类型的指南最接近的事情: MSDN operator overload
我从C ++背景来到C#,其中运算符重载是常态的一部分。 C#的问题在于它没有用处,因为所有对象都是引用。因此,你不能重载=运算符,在我看来,这对于复杂对象来说是最有用的运算符。话虽这么说,编写扩展方法可以用相同的代码实现相同的目标。
正如评论中所指出的,我已经在C#工作了近10年,并且还没有看到有人超载运营商。
答案 1 :(得分:2)
我希望使用运算符重载的情况是C#不允许使用它的情况 - 在扩展方法中。使用operator /或者运算符*来重载TimeSpan肯定会很好,但你不能拥有扩展运算符。
否则我认为在创建代数类型或(可能)使用链式运算符(ala C ++输出运算符)的新小语言时才有意义。例如。我可以看到Linq的变体基于操作员的兴趣。