使用System.Reflection.Emit命名空间将字段替换为Property?

时间:2009-06-12 21:19:18

标签: c# properties field reflection.emit

我正在尝试找出一种方法来使用Reflection.Emit命名空间来删除​​字段并将其替换为我自己的Property实现。我一直在阅读如何使用Emit生成代码以及直接编写和编译IL代码,但我还没有看到任何关于如何使用Reflection.Emit命名空间进行替换或删除的示例;任何人都可以向我展示这些内容的任何例子吗?

感谢。

2 个答案:

答案 0 :(得分:2)

据我所知,这在CLR中是不可能的。我甚至认为你一旦加载就不能修改它。根据您计划使用该属性的方式,您可以使用自定义TypeDescriptor(组件使用它来动态扩展属性,例如Windows窗体中的ToolTip组件),或者您可以使用DependencyProperty。但至于旧的后期绑定到加载类型的新成员或修改成员,我认为这是不可能的。

为什么不在将程序集加载到AppDomain之前使用Assembly.ReflectionOnlyLoadFrom加载DLL,然后在内存中发出带有动态生成类型的 new 类型,然后加载?

答案 1 :(得分:1)

您可以尝试使用Postsharp查看面向方面编程。

我从未使用过Postsharp,因此我没有具体的想法来确定你是如何实现这一目标的。然而,这听起来与我听说你可以用Postsharp做的一些惊人的相似(设置代码来运行属性或字段的前/后访问)。

http://www.postsharp.org/