我需要调用一个抽象类实现的方法。但是编译器总是默认使用具体类中重载的方法,因为签名只需要继承类型。
看一下代码:
-- 这显然是我正在使用的实际代码的大大简化版本 ;)
看一下代码:
-- 这显然是我正在使用的实际代码的大大简化版本 ;)
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>
它有效。
ConcreteClass
上的有效方法,并且您想要调用的override
方法实际上属于基础AbstractClass<TModel>
,因此它被忽略了。编辑:此外,重载规则可能会将两种方法视为“同等适用”;不确定。 - Chris Sinclair