我们如何检查实现相等运算符的类型的引用相等性?

时间:2013-12-03 21:15:52

标签: c# equality

在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 . . . ");
    }
}

2 个答案:

答案 0 :(得分:2)

如果您的意思是引用相等,即使Object.ReferenceEquals运算符因当前类型而重载,您也可以使用==静态方法:

Object.ReferenceEquals(obj1, obj2);

答案 1 :(得分:0)

对象“对象平等”是什么?

如果通过“我们如何检查实现相等运算符的类型的对象相等性?”,实际上意味着“我们如何检查实现IEquatable<T>的类型的对象相等性”,简短的答案是...... 。但是你想要(有一些警告)。

IEquatable<T>的文档提供了一些指导原则。您可能还想实现IComparable<T>。如果同时实现IEquatable<T>IComparable<T>,那么对于Equals()方法返回0的所有情况,true方法返回CompareTo()是有意义的,并且Equals()方法可以为false方法返回非零值的所有情况返回CompareTo()

此外,您可能希望确保正确覆盖==!=以提供与调用Equals()相同的行为。