我有一个接受接口的方法的基类。我想在子类中找到与此接口最匹配的方法。例如:基于C#中基类动态参数调用的子类查找方法
abstract class Base<T>
{
public T Get(IParam parameter){
return Provide(parameter as dynamic);
}
public abstract T Provide(IParam parameter);
}
class Impl<string> : Base<string>
{
public string Provide(IParam parameter)
{
return "default value";
}
public string Provide(ParamImplementation1 parameter)
{
return "value for implementation 1";
}
public string Provide(ParamImplementation2 parameter)
{
return "value for implementation 2";
}
}
不幸的是,每次都会返回默认值。当实际实现在子类中时,似乎动态关键字不起作用。有什么办法让这个工作?
动态关键字这里没有任何区别,抽象方法的实现必须完全有其相同的签名。这就是为什么每次只调用Provide(IParam参数),并且在这种情况下永远不会改变。 – 2014-10-27 14:58:01
“ParamImplementation1”和“ParamImplementation1”的重载不是基本抽象类的一部分,所以当“Base”调用Provide时,它只会返回它知道的IParam版本。 – DavidG 2014-10-27 15:03:07