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

And*_*ndy 5 c# overriding interface winforms

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

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

我尝试在基类中创建一个受保护的虚方法,从接口方法调用它,然后在派生类中重写此方法.这似乎有效,但FxCop抱怨规则CA1033"接口方法应该可以通过子类型调用".

(我的基类实现了接口,派生类没有.)

我应该如何改进这个(缩写的)代码更正确,或者我应该在这种情况下忽略FxCop?

在基类中:

protected virtual string ConstructSignal()
{
    return "Base string";
}

#region ISignal Members

string ISignal.GetMessage()
{
    this.ConstructSignal();
}

#endregion
Run Code Online (Sandbox Code Playgroud)

在派生类中:

protected override string ConstructSignal()
{
    return "Derived string";
}
Run Code Online (Sandbox Code Playgroud)

决定在最后隐式实现接口方法,这仍然有效并使FxCop保持高兴.

Ser*_*gei 2

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

string ISignal.GetMessage()
{
    (this as IConstructSignal).ConstructSignal(); // implementation of derived class called
}
Run Code Online (Sandbox Code Playgroud)