日期:2014-05-17  浏览次数:20915 次

【emit】能否用“PropertyBuilder”为已经存在的类增加属性
网上能找到的例子都是从程序集开始一步步构造的,PropertyCreator的构造函数也得传递TypeBuilder进去,有没有办法为一个已经存在的类增加属性呢?或者能否得到一个已经存在的类比如System.String的TypeBuilder?

------解决方案--------------------
已经存在的类是不允许改变结构的,TypeBuilder可以创建新的类型,但是不可以修改已经有的类型。你可以将已有类型的属性反射出来,然后创建新类型时包含那些属性,也可以通过其它方式例如System.Dynamic.ExpandoObject来实现运行时动态得到属性,还可以通过TypeDescriptionProvider类的继承,修改所有通过TypeDescriptor反射的得到的属性,例如WinForm下面的所有控件都是通过TypeDescriptor来反射类的属性的。