我有

public abstract class DataClass
{
    public static bool operator ==(DataClass left, DataClass right)
    {
        return left.Equals(right);
    }
}


这就是发生的事情

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


如何使它称为正确的实现,而无需显式转换?

最佳答案

static方法不受多态行为的影响(即不能被覆盖)。强制转换是必需的。

有关可能的解决方法,请参见以下相关问题:Override a static method

最有可能的是,您将不得不求助于创建实例方法或替代Equals

关于c# - 如何调用==运算符来调用子代的实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8915194/

10-11 02:11