当前位置:  开发笔记 > 编程语言 > 正文

C#:如何在运行时向对象添加属性?

如何解决《C#:如何在运行时向对象添加属性?》经验,为你挑选了1个好方法。

作为一个实体类,我想在运行时添加一个属性,我该怎么办?



1> Marc Gravell..:

需要看什么属性?如果它是数据绑定等,TypeDescriptor应该工作:

TypeDescriptor.AddAttributes(type, attribs);
TypeDescriptor.AddAttributes(instance, attribs);

这只会影响System.ComponentModel使用(不是直接反射),但这通常就足够了 - 例如,您可以TypeConverter通过上面的方式关联.

如果"属性"你的意思是"属性",那么(同样,就数据绑定而言)TypeDescriptor也有潜力 - 但它是非平凡的; 你需要ICustomTypeDescriptor在对象上实现,或者CustomTypeDescriptor为类型编写一个- 在任何一种情况下,你需要编写自己的PropertyDescriptor实现(通常与每个实例字典交谈等).这将被使用的任何东西使用:

// only works if you use TypeDescriptionProvider
PropertyDescriptorCollection typeProps = TypeDescriptor.GetProperties(type);
// works via TypeDescriptionProvider or ICustomTypeDescriptor
PropertyDescriptorCollection objProps = TypeDescriptor.GetProperties(obj);

同样,这涵盖了广泛的数据绑定和类似场景.举一个例子,请看这里 - 然而,这远非微不足道.示例用法(来自链接)在运行时添加两个属性:

Bag.AddProperty("TestProp", new DefaultValueAttribute(5)); 
Bag.AddProperty("Name"); 

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有