【发布时间】:2012-02-08 09:58:14
【问题描述】:
如果我为一个类重载operator ==,我必须在比较字段之前执行一些检查:
-
如果两个参数都为null,或者两个参数是同一个实例,则返回true
例如:
if (System.Object.ReferenceEquals(arg1, arg2)) return true; -
如果一个为null,但不是两者,则返回false
示例:
if (((object)arg1 == null) || ((object)arg2 == null)) return false;
确实,如果我有一个结构并且我想对operator == 进行重载,则这些检查不是必需的,而是无用的,原因如下:结构是一个值类型,所以不能为null,例如DateTime date = null;无效,因为DateTime(即struct)不是引用类型,所以不能比较两个DateTime,其中一个设置为null.
我用operator == 创建了一个简单的结构Point2D,然后我将Point2D 的一个实例与null 进行比较:
Point2D point = new Point2D(0,0);
Console.WriteLine((point == null));
-
显然
operator ==没有被调用,但比较返回False。调用哪个方法? -
documentation 声明不建议在非不可变类型中重载此运算符。为什么?
【问题讨论】:
-
您应该尝试一次只问一个问题。如果您有两个问题,请分别提出。
-
@svick:对不起。对于接下来的问题,我会避免这个。