2011-08-19 15 views

risposta

2

Non proprio come un metodo astratto è sempre nascosto e non vi è alcuna garanzia che l'override chiama base.Method() a un'implementazione di esso.

La cosa migliore è quella di creare un metodo virtuale, che genera l'evento e poi fare tutte le sostituzioni chiamano base.Method()

Se si vuole intercettare la chiamata di metodo, here è una domanda su come farlo.

3

Estratto o no, stai cercando un'infrastruttura Inversion of Control (IoC) qui, in particolare quella che ti permette di fare l'intercettazione del metodo.

Guarderei Unity o Spring. Ci sono alcuni altri là fuori.

3

Il modo migliore per farlo è il seguente:

public abstract class MyClass { 

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

    protected abstract void DoInner(); 
} 

Quando qualcuno vuole chiamare doInner devono chiamare DoOuter() per eseguirlo. Per specificare la funzionalità, sostituisci DoInner(). Pertanto, FireEvent() viene sempre chiamato prima che qualsiasi funzionalità di DoInner() sia specificata ... a meno che non venga chiamata direttamente da una classe figlia, che non può essere protetta.

+1

Questa è in realtà una domanda C#, quindi sto modificando la risposta un po ', ma l'idea principale è corretta. – StriplingWarrior

+0

D'oh. Grazie, StriplingWarrior. – DJClayworth

Problemi correlati