我有一個接口IBakeable<T>
每個有一個事件OnCooked
了StyleCop和MultipleGenericInterfaces和CA1033
幾個數據類的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;
}
不能解決規則。
我必須壓制這個規則嗎?還是有辦法修復它?
這是糟糕的代碼味道。當烤箱要用來烤蛋糕和磚塊時,你要做什麼?添加更多的接口和事件?熱源很適合發射正確的事件。如果有人對它使用* something *感興趣,那麼它需要自己的事件來顯示所做的事情。 –