当对象被装箱时,==运算符重载

dot*_*der 5 c#

以下代码的输出如下:

不等于
平等

请注意x和xx类型的差异以及==运算符重载仅在第二种情况下执行,而不是在第一种情况下执行.

有没有办法可以重载==运算符,以便在MyDataObejct实例之间进行比较时始终执行它.

编辑1:#这里我想覆盖MyDataClass上的==运算符,我不知道如何做到这一点,以便case1也执行重载==实现.

class Program {
    static void Main(string[] args) {
        // CASE 1
        Object x = new MyDataClass();
        Object y = new MyDataClass();
        if ( x == y ) {
            Console.WriteLine("equal");
        } else {
            Console.WriteLine("not equal");
        }

        // CASE 2 
        MyDataClass xx = new MyDataClass();
        MyDataClass yy = new MyDataClass();
        if (xx == yy) {
            Console.WriteLine("equal");
        } else {
            Console.WriteLine("not equal");
        }
    }
}

public class MyDataClass {
    private int x = 5;

    public static bool operator ==(MyDataClass a, MyDataClass b) {
        return a.x == b.x;
    }

    public static bool operator !=(MyDataClass a, MyDataClass b) {
        return !(a == b);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

不,基本上.==使用静态分析,因此将使用该对象==.听起来你需要使用object.Equals(x,y)(或者x.Equals(y)如果你知道它们都不是null),它使用多态.