如何呼叫==操作员以呼叫子';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
如何使它调用正确的实现,而不显式地强制转换?
static
方法不受多态行为的约束(即不能覆盖它们)。铸件是必需的。
有关可能的解决方法,请参阅此相关问题:覆盖静态方法
很可能您将不得不创建一个实例方法或重写Equals
。
您不能这样做,因为运算符是静态的,根据定义,它们不能是虚拟的/覆盖的。
在我遇到同样问题的情况下,我最终覆盖了bool Equals(object o)
,并使用了方法而不是运算符。如果这不是一个选项,那么强制转换是必要的。