我有一个IBakeable<T>
有事件的界面OnCooked
几个数据类Pie
和Bread
我有一个实现IBakeable<Pie>
和IBakeable<Bread>
为了实现这一点,我认为我必须明确地实现接口
public class BaseHeatSource: IBakeable<Pie>, IBakeable<Bread>
{
private event EventHandler OnPieCooked;
event EventHandler IBakeable<Pie>.OnCooked
{
add {OnPieCooked+= value;}
remove {OnPieCooked-= value;}
}
private event EventHandler OnBreadCooked;
event EventHandler IBakeable<Bread>.OnCooked
{
add {OnBreadCooked+= value;}
remove {OnBreadCooked-= value;}
}
}
并且类是继承的
public class Oven: BaseHeatSource
{
}
public class Fire: BaseHeatSource
{
}
现在我得到相当于:
CA1033 接口方法应该可以被子类型调用
使“BaseHeatSource”密封(如果该类先前已发布,则为重大更改),非显式实现该方法,或实现公开“IBakeable.OnCooked.add(EventHandler)”功能且对派生类可见的新方法.
如果派生类型重新实现(显式)继承的接口方法,则不能再访问基实现。通过当前实例引用的调用将调用派生实现;这会导致递归和最终的堆栈溢出。
请注意,添加
protected void AddOnBreadCookedHandler(EventHandler handler)
{
this.OnBreadCooked += handler;
}
不解决规则。
我必须禁止这条规则吗?或者有没有办法解决它?