2010-06-23 111 views
5

我想在基类中显式实现接口方法。覆盖派生类中显式实现的接口方法

除此之外,我想让这个方法是虚拟的,所以我可以在派生类上覆盖它,但明确实现的方法不允许这样做。

我已经尝试在基地制作受保护的虚拟方法,从接口方法调用此方法,然后在派生类中重写此方法。这似乎工作,但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

......当你的派生类转换为'ISignal'和'的GetMessage()'叫会发生什么? – Jay 2010-06-23 12:24:04

+0

我还在学习这东西:)有没有更好的办法,我可以做到这一点? – Andy 2010-06-23 12:46:36

+0

你真的需要混合显式实现和基类吗?最好的解决方案可能是简化你的模型。 – 2010-06-23 12:51:19

回答

2

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

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