Penso che siete alla ricerca di ciò che è chiamato Aspect Oriented Programming. Ci sono molte librerie C# per aiutare con questo. Uno si chiama PostSharp (la versione gratuita di PostSharp supporta questa funzionalità). Ecco un esempio simile all'esempio alce. Questo crea un attributo Trace, che è possibile utilizzare su altri metodi per virare su questa funzionalità in più:
[Serializable]
public class TraceAttribute : OnMethodBoundaryAspect
{
public override void OnEntry(MethodExecutionArgs args)
{
Trace.WriteLine("about to call method");
}
public override void OnExit(MethodExecutionArgs args)
{
Trace.WriteLine("just finished calling method");
}
}
si dovrebbe aggiungere al metodo di "Pippo", mettendo la Trace attribuire a destra prima di esso:
[Trace]
public void Foo() { /* ... */ }
Ora, quando Foo viene eseguito, il metodo OnEntry sopra verrà eseguito prima di esso e OnExit verrà eseguito subito dopo.
fonte
2011-02-01 22:04:12
Probabilmente è possibile con qualche riflessione nifty, ma non credo che sarà bello ... – Alxandr