我想在基类上显式实现一个接口方法。
除此之外,我想将此方法设为虚拟,以便我可以在派生类上覆盖它,但显式实现的方法不允许这样做。
我尝试在基类中创建一个受保护的虚方法,从接口方法调用它,然后在派生类中重写此方法。这似乎有效,但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满意。
答案 0 :(得分:2)
将ConstructSignal()方法声明移动到某个接口(让它命名为IConstructSignal)并在派生类中实现它。 明确实施后将起作用:
string ISignal.GetMessage()
{
(this as IConstructSignal).ConstructSignal(); // implementation of derived class called
}