繁体   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