加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:47:22 所属栏目:百科 来源:网络整理
导读:作为一个实体类,我想在运行时添加一个属性,该怎么办? 解决方法 什么需要看到属性?如果它是像数据绑定等等,TypeDescriptor应该工作: TypeDescriptor.AddAttributes(type,attribs);TypeDescriptor.AddAttributes(instance,attribs); 这只会影响System.Compo
作为一个实体类,我想在运行时添加一个属性,该怎么办?

解决方法

什么需要看到属性?如果它是像数据绑定等等,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);

同样,这涵盖了广泛的数据绑定和类似的场景.对于一个例子,see here – 然而,这并不是微不足道的.示例使用(从链接)在运行时添加两个属性:

Bag.AddProperty<int>("TestProp",new DefaultValueAttribute(5)); 
Bag.AddProperty<string>("Name");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读