考虑下面这段简单的代码:
public void Main()
{
var d = new Derived();
test(d);
}
public void test(Base parameter)
{
parameter.Validate();
}
public class Base
{
}
public class Derived : Base
{
}
public static class Validation
{
public static void Validate(this Base b)
{
Console.WriteLine("Validation for base");
}
public static void Validate(this Derived d)
{
Console.WriteLine("Validation for Derived");
}
}
当调用测试方法时,它将执行Validate方法并传递基本参数,与我调用 d.Validate()
的方式不同。
如何在不进行类型测试的情况下强制测试方法调用正确的Validate方法?
parameter
是一个Base
,即使传递的对象实际上是一个Derived
,也会调用扩展Base
的方法。您可以通过提供一个接受Derived
的test()
重载来解决这个问题,但如果您有许多派生类,这种解决方案就不太可行了。 - Frédéric Hamidi