ReferenceEquals()的合法使用
本文关键字:ReferenceEquals | 更新日期: 2023-09-27 18:29:29
在按照声明性风格编写的.NET程序中,ReferenceEquals()有哪些合法用途?
不知道"按照声明式编写"是什么意思,但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、避免循环。
在按照声明性风格编写的.NET程序中,ReferenceEquals()的一些合法用途是什么?
无论编写程序的"样式"如何,ReferenceEquals只有一种合法用途:比较两个引用是否相等。
如果您使用ReferenceEquals而不是比较两个引用以获得引用相等,那么您可能做错了什么。
好吧,如果相关对象的设计和/或使用使得任何对象的实例都不会超过一个,那么它将是正确的,并且可能比比较一些实例变量更快。
或者,正如在另一个答案中所发布的,你可以先将其作为"轻松出局"进行检查,只有在它们不同的情况下才进行深度相等检查。这种用法只是性能的提高。