覆盖派生类中显式实现的接口方法
问题描述:
我想在基类中显式实现接口方法。覆盖派生类中显式实现的接口方法
除此之外,我想让这个方法是虚拟的,所以我可以在派生类上覆盖它,但明确实现的方法不允许这样做。
我已经尝试在基地制作受保护的虚拟方法,从接口方法调用此方法,然后在派生类中重写此方法。这似乎工作,但FxCop抱怨规则CA1033“接口方法应该可以由子类型调用”。
(我的基类实现接口,派生类没有。)
我应该如何改善这个(缩写)的代码更加正确的,或者我应该只是忽略的FxCop在这种情况下?
在基类:
protected virtual string ConstructSignal()
{
return "Base string";
}
#region ISignal Members
string ISignal.GetMessage()
{
this.ConstructSignal();
}
#endregion
在派生类中:
protected override string ConstructSignal()
{
return "Derived string";
}
决定隐含贯彻到底,这仍然有效,并保持的FxCop高兴的接口方法。
答
将ConstructSignal()方法声明移动到某个接口(让它命名为IConstructSignal)并在派生类中实现它。 继显式实现将工作:
string ISignal.GetMessage()
{
(this as IConstructSignal).ConstructSignal(); // implementation of derived class called
}
......当你的派生类转换为'ISignal'和'的GetMessage()'叫会发生什么? – Jay 2010-06-23 12:24:04
我还在学习这东西:)有没有更好的办法,我可以做到这一点? – Andy 2010-06-23 12:46:36
你真的需要混合显式实现和基类吗?最好的解决方案可能是简化你的模型。 – 2010-06-23 12:51:19