是否有一個簡潔的方法來創建幾個類(從一個接口派生),以便每個類執行相同的操作?想想服務於每個請求的ASP.NET模塊中的http模塊(每個關鍵字) - 是否有一種方法可以對派生類型執行一些常見操作?反思可能是一種方式,但我會對基礎級別的方式感興趣。在派生類型上執行通用操作
感謝
是否有一個簡潔的方法來創建幾個類(從一個接口派生),以便每個類執行相同的操作?想想服務於每個請求的ASP.NET模塊中的http模塊(每個關鍵字) - 是否有一種方法可以對派生類型執行一些常見操作?反思可能是一種方式,但我會對基礎級別的方式感興趣。在派生類型上執行通用操作
感謝
如果你的類都來自一個共同的基類派生的,你可以把這個邏輯在公共基類。
不僅僅只有一個接口;你想在中間有一個抽象類:
abstract class Whatever : IFooable {
public virtual void Do() {
PreDo();
}
protected abstract void PreDo();
}
然後調用Do
,並PreDo
自動首先呼籲所有執行類型。
(編輯:爲了清楚起見,我製作了Do
虛擬,所以這意味着如果您重新實現它,您應該首先調用base.Do()
作爲第一件事,以確保它實際調用父方法)。
如果我明白你的要求是正確的,那麼可能事件處理程序是要走的路?
如果您需要一堆對象來響應某個動作,那麼事件(也稱爲「消息傳遞」)就是要走的路。
這樣的事情?
class Foo
{
public event EventHandler PerformAction;
private void OnActionNeeded()
{
// A bunch of Bars need to do something important now.
if (PerformAction != null)
PerformAction.Invoke();
}
}
class Bar
{
public Bar(Foo fooToWatch)
{
fooToWatch.PerformAction += new EventHandler(Foo_PerformAction);
}
void Foo_PerformAction(object sender, EventArgs e)
{
// Do that voodoo that you do here.
}
}
模板方法設計模式可能適用於你的要求。
設計的接口的總體點是提供兩個組件之間的協議和隱藏實現的一部分。這些接口用作通信媒介。 你在問什麼似乎是具體實施。 可以使用實用程序類(使用該方法的單例)來乾淨地處理它 我不建議在當前場景中使用抽象類。
我認爲接口(或抽象類)的全部觀點是每個實現類都支持相同的常用方法。我錯過了一個備忘錄嗎? – Aaronaught 2010-01-26 23:39:49
Aaronaught:顯然你沒有,但是有一種情況下,有一種方法會自動爲你調用,作爲init進程的一部分。雖然我同意這有點可疑。 – 2010-01-26 23:42:07