为什么不经常使用运算符过载?

Ome*_*ger 3 c# operator-overloading

在许多情况下,操作员超载允许您更好地表达自己.为什么它们几乎不用于C#?

Gar*_*ryF 11

它们不经常使用,因为通常在大多数对象类上进行数学运算(大多数运算符都是没有意义的).您想要的操作的语义通常在某种程度上是不同的.您不会对一堆OrderLine对象使用添加,例如,当您真正想要聚合或分组时.

要使用您在问题的注释中提供的示例,"+"似乎是将子元素放入父元素的一种不错的方式,但操作具有完全不同的语义."+"表示你会在数学上将它们加在一起,而实际上你的目标是在两者之间建立层次关系.它可能对你有意义,但我想在第一次阅读时,很多程序员可能并不明白.

它们很少使用,因为它们很少适合.

  • 事实上,你必须解释你的意思是一个指标,它首先可能不是一个好主意 - 好的代码应该是自我记录. (4认同)

小智 6

它们稀有的另一个原因是,虽然函数重载可以通过函数的名称进行自我记录,并且通常通过上下文,操作符通常只有一个或两个字符长.

因此,不能明确地明确过载的精确目的.例如,字符串!=比较运算符重载在其中没有空间来表示它是比较长度,执行逐字符不区分大小写的比较,还是查找静态索引数组中的值,并比较它们(尽管这是一个荒谬的例子).