gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:42:20 24 4
gpt4 key购买 nike

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

最佳答案

需要看什么属性?如果是数据绑定(bind)等,TypeDescriptor 应该可以工作:

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

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

如果您所说的“属性”是指“属性”,那么(同样,就数据绑定(bind)而言)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);

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

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

关于C#:如何在运行时向对象添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/563548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com