C# 中的方法调用拦截
C# 缺乏直接的 AOP 支持,但巧妙的技术可以实现方法调用拦截。 让我们用示例类来检查一下:
<code class="language-csharp">public class Caller { public static void Call() { Traced traced = new Traced(); traced.Method1("test", 10); traced.Method2(new object()); } } public class Traced { public void Method1(string name, int value) { } public void Method2(object obj) { } } public class Logger { public static void LogStart(MethodInfo method, object[] parameters) { /* Logging logic */ } public static void LogEnd(MethodInfo method) { /* Logging logic */ } }</code>
不改变方法的拦截
此方法利用 Reflection.Emit
进行动态代码注入:
GetMethods
获取需要拦截的方法。ILGenerator
。ILGenerator
在方法执行之前和之后插入对Logger.LogStart
的调用。Logger.LogEnd
拦截,呼叫者发生细微变化
稍微修改允许基于事件的方法:Caller.Call
Caller.Call
调用。Logger
性能影响
方法虽然功能强大,但会带来性能开销。 生产实施应优先考虑优化策略。Reflection.Emit
以上是在没有显式 AOP 支持的情况下,如何在 C# 中拦截方法调用?的详细内容。更多信息请关注PHP中文网其他相关文章!