我们如何检查实现相等运算符的类型的引用相等性?
在C#中,我们如何检查实现相等运算符的类型的引用相等性?
class C { public int Val{get;set;} public static bool operator ==(C c1, C c2) { return c1.Val == c2.Val; } public static bool operator !=(C c1, C c2) { return c1.Val != c2.Val; } } class Program { public static void Main(string[] args) { C c1=new C(){Val=1}; C c2=new C(){Val=1}; Console.WriteLine(c1==c2);//True. but they are not same objects. //How can I Check that? Console.Write("Press any key to continue . . . "); } }
如果你的意思是通过引用相等,你可以使用Object.ReferenceEquals
静态方法,即使==
运算符被重载以使当前类型工作,否则:
Object.ReferenceEquals(obj1, obj2);
对象“对象平等”是什么?
如果通过“我们如何检查实现相等运算符的类型的对象相等性?”,实际上意味着“我们如何检查实现IEquatable
的类型的对象相等性”,简短的答案是… 但是你想要的 (有一些警告)。
IEquatable
的文档提供了一些指导。 您可能还想要实现IComparable
。 如果你同时实现了IEquatable
和IComparable
,那么你的Equals()
方法对于CompareTo()
方法返回0的所有情况都返回true
,并且你的Equals()
方法返回false
有意义的对于CompareTo()
方法返回非零值的所有情况。
此外,您可能希望确保正确覆盖==
和!=
以提供与调用Equals()相同的行为。