在 C# 中不使用第三方函式庫攔截方法呼叫
在不使用外部函式庫的情況下攔截 C# 中的方法調用,可以使用幾種方法,儘管沒有一種方法很簡單。以下列出了兩種可考慮的方案:
繼承目標類別自 MarshalByRefObject
或 ContextBoundObject
,定義一個繼承自 IMessageSink
的屬性。修改該屬性以攔截方法呼叫並呼叫對應的日誌記錄方法。但是,這種方法會嚴重影響效能。
使用反射來檢查類,檢索屬性,並將程式碼注入到現有方法中。這需要深入了解反射,並且由於 Reflection.Emit
的限制,可能不可行或不可靠。或者,可以考慮使用 CLR 編譯器的擴展,但這需要 C# 開發人員通常不具備的專業知識。
使用呼叫方法修改的部分解:
如果允許修改 Caller.Call
方法,則解決方案將更易於管理。透過使用攔截代理程式或建立實作與 Traced
相同介面的新類,可以攔截方法呼叫並在委託給原始類別之前執行所需的日誌記錄。這種方法需要一些重構,但避免了 C# 中 AOP 的複雜性。
以上是如何在沒有外部函式庫的情況下攔截 C# 中的方法呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!