在编写为遵循声明式样式的.NET程序中,ReferenceEquals()的一些合法用途是什么?
答案 0 :(得分:12)
不确定“写入以遵循声明式样式”是什么意思,但通常在覆盖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,to 避免循环。
答案 1 :(得分:11)
在编写为遵循声明式样式的.NET程序中,ReferenceEquals()的一些合法用途是什么?
无论编写程序的“样式”如何,只有一个合法使用的ReferenceEquals:比较两个引用以进行引用相等。
如果您使用ReferenceEquals而不是比较两个引用以获得引用相等性,那么您可能做错了。
答案 2 :(得分:1)
好吧,如果相关对象的设计和/或使用是这样的,任何对象的实例永远不会超过任何其他对象,那么它将是正确的,并且它可能更快而不是比较一些实例变量。
或者,正如在另一个答案中发布的那样,您可以先将其检查为“简单”,并且只有在它们不同时才执行深度等于检查。这种用法只是提高了性能。