覆盖派生类中显式实现的接口方法

时间:2010-06-23 11:55:08

标签: c# winforms interface override

我想在基类上显式实现一个接口方法。

除此之外,我想将此方法设为虚拟,以便我可以在派生类上覆盖它,但显式实现的方法不允许这样做。

我尝试在基类中创建一个受保护的虚方法,从接口方法调用它,然后在派生类中重写此方法。这似乎有效,但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满意。

1 个答案:

答案 0 :(得分:2)

将ConstructSignal()方法声明移动到某个接口(让它命名为IConstructSignal)并在派生类中实现它。 明确实施后将起作用:

string ISignal.GetMessage()
{
    (this as IConstructSignal).ConstructSignal(); // implementation of derived class called
}