如何呼叫==操作员以呼叫子';s的实施

本文关键字:呼叫 何呼叫 操作员 | 更新日期: 2023-09-27 18:20:37

我有

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

如何使它调用正确的实现,而不显式地强制转换?

如何呼叫==操作员以呼叫子';s的实施

static方法不受多态行为的约束(即不能覆盖它们)。铸件是必需的。

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

很可能您将不得不创建一个实例方法或重写Equals

您不能这样做,因为运算符是静态的,根据定义,它们不能是虚拟的/覆盖的。

在我遇到同样问题的情况下,我最终覆盖了bool Equals(object o),并使用了方法而不是运算符。如果这不是一个选项,那么强制转换是必要的。