在遵循声明式风格编写的.NET程序中,ReferenceEquals()的一些合法用法是什么?
发布于 2012-03-28 23:41:01
我不知道你所说的“遵循声明风格”是什么意思,但是当覆盖==操作符时,通常会使用ReferenceEquals。来自http://msdn.microsoft.com/en-us/library/ms173147.aspx
public static bool operator ==(ThreeDPoint a, ThreeDPoint b)
{
// If both are null, or both are same instance, return true.
if (System.Object.ReferenceEquals(a, b))
{
return true;
}
// If one is null, but not both, return false.
if (((object)a == null) || ((object)b == null))
{
return false;
}
// Return true if the fields match:
return a.x == b.x && a.y == b.y && a.z == b.z;
}有关理由,请参阅下面的注释,这很重要:
注意:运算符==重载中的一个常见错误是使用(a == b)、(a == null)或(b == null)检查引用是否相等。相反,这会创建对重载操作符==的调用,从而导致无限循环。使用ReferenceEquals或将类型强制转换为Object,以避免循环。
发布于 2012-03-28 23:45:20
在一个遵循声明式风格的.NET程序中,ReferenceEquals()的一些合法用法是什么?
无论程序是以什么“风格”编写的,只有一种合法的ReferenceEquals用法:比较两个引用是否相等。
如果您使用ReferenceEquals的目的不是比较两个引用是否相等,那么您可能做错了什么。
发布于 2012-03-28 23:42:15
好吧,如果相关对象的设计和/或用法是这样的,即任何对象的一个实例永远不会与任何其他对象“相等”,那么它将是正确的,而且它可能比比较一些实例变量更快。
或者,正如在另一个答案中发布的,您可以首先将其作为“简单输出”进行检查,如果它们不同,则只执行深度等于检查。这种用法只是性能上的提升。
https://stackoverflow.com/questions/9910996
复制相似问题