【发布时间】:2010-06-23 11:55:07
【问题描述】:
我想在基类上显式实现接口方法。
除此之外,我想将此方法设为虚拟,以便在派生类上覆盖它,但显式实现的方法不允许这样做。
我尝试在基类中创建一个受保护的虚拟方法,从接口方法调用它,然后在派生类中覆盖这个方法。这似乎可行,但 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 满意。
【问题讨论】:
-
...当你的派生类被强制转换为
ISignal并调用GetMessage()时会发生什么? -
我还在学习这些东西 :) 有更好的方法吗?
-
你真的需要混合显式实现和基类吗?最好的解决方案可能是简化您的模型。
-
请发布实际产生 CA1033 的代码。
标签: c# winforms interface overriding