簡體   English   中英

我們如何檢查實現相等運算符的類型的引用相等性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM