簡體   English   中英

如何在現有DLL中覆蓋C#方法?

[英]How to Override a C# method in existing DLL?

我有一個實例,其中我正在使用別人的庫(作為DLL導入)。 我只想在該類中更改兩個私有函數。 我真的很喜歡在DLL的外部進行此操作,因此當其他人釋放新的DLL時,我可以快速更新DLL,而不必更改源代碼並構建自己的DLL。

是否有可能做到這一點? 我可以以某種方式從DLL外部覆蓋C#dll中的一些私有函數嗎?

我真的很喜歡在DLL外部執行此操作,因此當其他人釋放新的DLL時,我可以快速更新我的DLL

考慮一下。 假設您成功攔截/覆蓋了它們的私有功能。 下一個版本刪除這些功能或更改其行為時會發生什么?

成員通常出於某種原因是私人的。

有效的方法是包裝外部程序集以控制/抽象行為,或覆蓋為繼承而設計的公共/受保護成員。

召集私人成員很容易思考。 修改它們以使其調用者使用新的實現更為復雜。

而不必更改源代碼並構建自己的DLL。

如果確實需要這樣做,則更改源可能是最直接的方法。*您還可以查看IL編織 ,它可能適合此任務。

更好的方法是與作者合作,使圖書館在您需要的領域中更具擴展性。

*這假設您具有對源代碼的合法訪問權或被允許反匯編程序集。 這可能會違反許可證中的逆向工程條款,使維護合同無效等。我不是律師。

我認為您可以使用TypeBuilder.DefineMethodOverride。 有關詳細信息,請參見此問題。 是否可以通過反射“替代”方法?

如果這不起作用,則可以嘗試使用反射來構建運行時代理類,但用實現替換要覆蓋的方法的調用。 那當然是一點伏都教。 代碼檢測執行類似的操作-將自定義代碼注入您的方法。 實際上,這就是我建議研究的內容-儀器如何工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM