首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C#中拦截方法调用?

如何在C#中拦截方法调用?
EN

Stack Overflow用户
提问于 2008-08-25 09:00:24
回答 16查看 99.2K关注 0票数 156

对于给定的类,我希望具有跟踪功能,即我希望记录每个方法调用(方法签名和实际参数值)和每个方法退出(只记录方法签名)。

假设存在以下情况,我该如何完成此操作:

我不想为C#,,

  • 使用任何第三方AOP库,我不想给我想要跟踪的所有方法添加重复的代码,

  • ,我不想改变类的公共API --类的用户应该能够以完全相同的方式调用所有的方法。

为了让问题更具体,让我们假设有3个类:

 public class Caller 
 {
     public static void Call() 
     {
         Traced traced = new Traced();
         traced.Method1();
         traced.Method2(); 
     }
 }

 public class Traced 
 {
     public void Method1(String name, Int32 value) { }

     public void Method2(Object object) { }
 }

 public class Logger
 {
     public static void LogStart(MethodInfo method, Object[] parameterValues);

     public static void LogEnd(MethodInfo method);
 }

如何为每个对Method1和Method2的调用调用Logger.LogStart和Logger.LogEnd,而不修改Caller.Call方法,也不显式地将调用添加到Traced.Method1和Traced.Method2

编辑:如果允许我稍微更改调用方法,那么解决方案是什么?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档