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中文網其他相關文章!