当前位置: 首页 > 编程语言 > C#

我可以在运行时向对象属性添加属性吗?分享

时间:2023-04-10 20:38:50 C#

我可以在运行时向对象属性添加属性吗?例如,我想删除或更改下面的property属性或添加一个新属性。是否可以?[XmlElement("bill_info")][XmlIgnore]publicBillInfoBillInfo{get{returnbillInfo;}设置{billInfo=值;}}(编辑——我误读了原来的问题)你不能添加实际的属性(它们被刻录到IL中);但是,对于XmlSerializer,您不必这样做——您可以在构造函数中为XmlSerializer提供额外的属性。但是,如果你这样做,你需要小心缓存XmlSerializer实例,否则它会为每个实例创建一个额外的程序集,这有点漏洞。(如果您使用仅接受类型的简单构造函数,则不会这样做)。看看XmlAttributeOverrides。例如:使用系统;使用System.Xml.Serialization;公共类Person{staticvoidMain(){XmlAttributeOverridesoverrides=newXmlAttributeOverrides();XmlAttributes属性=newXmlAttributes();attribs.XmlIgnore=false;添加(新的XmlElementAttribute(“personName”));覆盖。添加(类型(人),“姓名”,属性);XmlSerializerser=newXmlSerializer(typeof(Person),overrides);Personperson=newPerson();person.Name="Marc";ser.Serialize(Console.Out,person);}私有字符串名称;[XmlElement("name")][XmlIgnore]publicstringName{get{returnname;}设置{名称=值;}}}另请注意;如果xml属性只是描述性的,还有第二种方法可以通过使用TypeDescriptor.CreateProperty和ICustomTypeDescriptor或TypeDescriptionProvider为数据绑定相关的事物添加属性。比xml情况复杂得多,我担心-不适用于所有代码-仅适用于使用组件模型的代码。无法在运行时添加/删除类中的属性。但是,XML序列化的工作方式可以在运行时更新而无需编辑属性。见马克的帖子。编辑更新C#学习教程就是这样:CanIaddpropertiestoobjectpropertiesatruntime?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: