Creo que estás en busca de lo que se denomina programación orientada a aspectos. Hay muchas bibliotecas C# para ayudar con esto. Uno se llama PostSharp (la versión gratuita de PostSharp admite esta funcionalidad). Aquí hay un ejemplo similar al ejemplo de alces. Esto crea un atributo de seguimiento que se puede utilizar en otros métodos para añadir esta funcionalidad extra:
[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");
}
}
deberá añadir al método de "Foo" mediante la colocación de la traza atribuir justo antes de que:
[Trace]
public void Foo() { /* ... */ }
Ahora cuando Foo se ejecuta, el método OnEntry anterior se ejecutará antes que él, y OnExit se ejecutará inmediatamente después.
Probablemente pueda hacerlo con una buena reflexión, pero no creo que sea bonito ... – Alxandr