我正在尝试找出一种使用 Reflection.Emit 命名空间来删除字段并将其替换为我自己的 Property 实现的方法。我一直在阅读如何使用 Emit 生成代码以及直接编写和编译 IL 代码,但我还没有看到任何关于如何使用 Reflection.Emit 命名空间进行替换或删除的示例;任何人都可以向我展示这些方面的任何例子吗?
谢谢。
我正在尝试找出一种使用 Reflection.Emit 命名空间来删除字段并将其替换为我自己的 Property 实现的方法。我一直在阅读如何使用 Emit 生成代码以及直接编写和编译 IL 代码,但我还没有看到任何关于如何使用 Reflection.Emit 命名空间进行替换或删除的示例;任何人都可以向我展示这些方面的任何例子吗?
谢谢。
据我所知,这在 CLR 中是不可能的。我什至不认为你可以在加载后修改类型。根据您计划如何使用该属性,您可以使用自定义 TypeDescriptor(组件使用它来动态扩展属性,例如 Windows 窗体中的 ToolTip 组件),或者您可以使用 DependencyProperty。但至于普通旧的后期绑定到加载类型的新成员或修改成员,我认为这是不可能的。
为什么不使用 Assembly.ReflectionOnlyLoadFrom 在将程序集加载到 AppDomain 之前加载 DLL,然后在内存中使用动态生成的类型发出一个新类型,然后再加载它?
您可以尝试使用 Postsharp 研究面向方面的编程。
我从来没有使用过 Postsharp,所以我对你如何完成这个没有具体的想法。然而,这听起来确实与我听说您可以使用 Postsharp 做的一些事情惊人地相似(设置代码以运行属性或字段的前/后访问)。