我需要调用抽象类实现的方法。但是编译器总是默认使用具体类的重载方法,因为签名只需要一个继承的类型。
看看代码:
-- 这显然是我正在使用的实际代码的一个大大简化的版本;)
public class ModelBase { }
public class ModelA : ModelBase { }
public interface IInterface<in TModel>
{
void Do(TModel model);
}
public abstract class AbstractClass<TModel> : IInterface<TModel>
{
public abstract void Do(TModel model);
}
public class ConcreteClass : AbstractClass<ModelA>, IInterface<ModelBase>
{
public override void Do(ModelA model)
{
// I'd like to invoke this method
}
public void Do(ModelBase model)
{
// how do I invoke the method above??
Do((ModelA)model);
}
}
^^ 这会导致递归
我试过的是:
((IClass<ModelA>)this).Do((ModelA)model);
^^ 不会改变任何东西
base.Do((ModelA)model);
^^ 抛出错误“无法调用抽象基成员:'AbstractClass.Do(ModelA)'”
如何调用“public override void Do(ModelA model)”方法?
顺便提一句。如果我把课程改成这个
public class ConcreteClass : IInterface<ModelA>, IInterface<ModelBase>
有用。