如何调用==运算符来调用子进程的实现?

Jad*_*ias 1 .net c# inheritance overriding operator-keyword

我有

public abstract class DataClass
{
    public static bool operator ==(DataClass left, DataClass right)
    {
        return left.Equals(right);
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是发生的事情

object left = new DataClass();
object right = new DataClass();
bool expected = true;
bool actual;
actual = ((DataClass)left) == ((DataClass)right);
Assert.AreEqual(expected, actual); // passes
actual = left == right;
Assert.AreEqual(expected, actual); // fails
Run Code Online (Sandbox Code Playgroud)

如何让它调用正确的实现,而不是显式地强制它?

Tud*_*dor 8

static方法不受多态行为的影响(即它们不能被覆盖).演员是必需的.

有关可能的解决方法,请参阅此相关问题:覆盖静态方法

您很可能不得不求助于创建实例方法或改写Equals.