2011-08-19 61 views

回答

2

不是真正的抽象方法總是被超越,並且不能保證被覆蓋調用base.Method()來實現它。

最好的辦法是創建引發該事件的虛擬方法,然後讓所有的覆蓋呼叫base.Method()

如果你想攔截方法調用,here是關於如何做到這一點的問題。

3

抽象或不,你正在尋找一個控制反轉(IoC)框架,特別是一個可以讓你做方法攔截的控件。我看看UnitySpring。那裏還有其他幾個人。

3

做到這一點,最好的方法是如下:

public abstract class MyClass { 

    public void DoOuter() { 
     FireEvent(); 
     DoInner(); 
    } 

    protected abstract void DoInner(); 
} 

當有人想打電話doInner他們打電話DoOuter()爲了執行它。要指定功能,請覆蓋DoInner()。因此FireEvent()始終在指定功能之前被調用......除非它被子類直接調用,這是您無法真正防範的。

+1

這實際上是一個C#的問題,所以我編輯答案一點,但主要想法是正確的。 – StriplingWarrior

+0

D'oh。謝謝,StriplingWarrior。 – DJClayworth