C#重载操作符==和!=时注意问题

public class MyClass
{
    public int ID;

    /*
    public static bool operator ==(MyClass c1, MyClass c2)
    {
        //下面这段代码中的“==”调用会进入递归,直至崩溃
        if (c1 == null || c2 == null)
        {
            return c1 == c2;
        }
        return c1.ID == c2.ID;
    }
    public static bool operator !=(MyClass c1, MyClass c2)
    {
        //下面这段代码中的“==”调用会进入递归,直至崩溃
        if (c1 == null || c2 == null)
        {
            return c1 != c2;
        }
        return c1.ID != c2.ID;
    }
    */
    
    //正确的方法
    public static bool operator ==(MyClass c1, MyClass c2)
    {
        //将c1对象转为object再进行判断
        //这里的object.Equals(c1, null)也可以写成
        //c1 as object == null
        if (object.Equals(c1, null) || object.Equals(c2, null))
        {
            return object.Equals(c1, c2);
        }
 
 
        return c1.ID == c2.ID;
    }
 
    public static bool operator !=(MyClass c1, MyClass c2)
    {
        if (object.Equals(c1, null) || object.Equals(c2, null))
        {
            return !object.Equals(c1, c2);
        }
 
 
        return c1.ID != c2.ID;
    }
}

 

你可能感兴趣的:(C#)