假設我有許多使用不同簽名的方法。根據一些外部代碼,所有這些方法可能調用。你可能會認爲它們是一些事件處理程序。如何避免空基抽象類?
現在我應該有兩種實現像這樣:
- 每個實現真正處理只有所有可能的事件的一部分。
- 每個實現對於它不想/不能處理的所有事件都不做任何事情。
我當然可以爲所有可能的處理程序聲明一個接口,但是接下來我將不得不在每個實現中創建空方法(處理程序)。即使對於那些我不想/不能處理的事件。
我想這樣做類似如下:
abstract class Base
{
public virtual void First(int i, double d) { /* no implementation */ }
public virtual void Second(double d) { /* no implementation */ }
public virtual void Third(string s, int i) { /* no implementation */ }
}
class Child : Base
{
public override void First(int i, double d) { /* implementation */ }
public override void Second(double d) { /* implementation */ }
}
class AnotherChild : Base
{
public override void Second(double d) { /* implementation */ }
public override void Third(string s, int i) { /* implementation */ }
}
這種做法迫使我在基地抽象類的所有可能的處理程序創建空的實現。
你能推薦一些更好的東西嗎?一種不需要產生大量空方法的方法?
我正在使用C#2.0,並且無法在此任務中使用較新版本的語言。
我認爲你在那裏做的完美是有道理的。我不認爲空的方法體是任何問題。或者,您可以使用所有派生類訂閱的常規事件。 – usr
@JFFx我需要在另一個類中使用任一實現。這個班會爲處理所有可能的事件。一個實現將處理事件的一部分,其他實現將處理其他部分。這些部分確實重疊。 – Bobrovsky
@leppie:你爲什麼刪除2.0標籤?這個問題僅限於那個平臺,所以例如一些「動態」方法是沒有問題的。 – quetzalcoatl