[英]How can we check reference equality for a type that implements equality operator?
在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<T>
的類型的對象相等性”,簡短的答案是... 但是你想要的 (有一些警告)。
IEquatable<T>
的文檔提供了一些指導。 您可能還想要實現IComparable<T>
。 如果你同時實現了IEquatable<T>
和IComparable<T>
,那么你的Equals()
方法對於CompareTo()
方法返回0的所有情況都返回true
,並且你的Equals()
方法返回false
有意義的對於CompareTo()
方法返回非零值的所有情況。
此外,您可能希望確保正確覆蓋==
和!=
以提供與調用Equals()相同的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.