在什么情况下你会考虑在.NET中重载操作符?
答案 0 :(得分:17)
Equals
IComparable<T>
Nullable<T>
)如果含义不是很明显,那么黄金法则不来重载运算符。例如,我认为在Stream
上有一个+运算符会很奇怪 - 它可能意味着“在这里写一个可写的T,所以写入结果写入两者”或者它可能意味着“读取一个其他“或可能是其他事情。”
根据我的经验,除了==和!=。
之外,很少重载答案 1 :(得分:16)
我认为Framework design guidelines提供了一些不错的建议:
- AVOID定义运算符重载,除了应该感觉类型的类型 原始(内置)类型。
- CONSIDER在一个应该感觉像基本类型的类型中定义运算符重载。
- 在表示数字的结构中定义运算符重载(例如 System.Decimal)。
- 定义运算符重载时不要太可爱。
- 除非至少有一个操作数是定义过载的类型,否则不要提供操作符重载。
- DO以对称的方式重载运算符。
- 考虑提供具有对应的友好名称的方法 每个重载的运营商。
答案 2 :(得分:3)
我确实要求关闭它,但也许它可以保持开放(我试图改变主意,但显然你不能撤销一个关闭请求:P)
我将亲自回答:从不。
我从不认为实现运算符重载是个好主意。只有一个例外:如果我正在编写某种集合(它不常发生)并且我想实现索引器[]
。
我个人认为,我认为推翻==
和其他此类事情并不合适。但话说回来,我并不是在复杂的数学和金融领域工作,而这些东西可能有用。但是我不能从这个问题的经验谈起(实际上,我可以在金融界,我们没有在那里做)。
答案 3 :(得分:3)
我考虑在这种情况下覆盖运算符:
答案 4 :(得分:2)
我会考虑对表示逻辑值的类型使用运算符重载进行算术运算。例如,有些时候我希望Point
+
和-
运算符过载{{1}}。