Я думаю, что вы ищете то, что называется Аспект-ориентированного программирования. Для этого есть много библиотек C#. Один из них называется PostSharp (бесплатная версия PostSharp поддерживает эту функцию). Вот пример, похожий на пример лося. Это создает Трассировка атрибут, который вы можете использовать другие методы, чтобы лавировать на эту дополнительную функциональность:
[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");
}
}
Вы бы добавить его в метод «Foo» путем размещения Трассировка атрибута прямо перед ним:
[Trace]
public void Foo() { /* ... */ }
Теперь, когда Foo выполняет, перед ним будет запущен вышеописанный метод OnEntry, и OnExit будет работать сразу после.
Возможно, вы можете с отличным отражением, но я не думаю, что это будет довольно ... – Alxandr