在运行时更改Class Attribute中的值

时间:2013-03-13 00:34:41

标签: c# custom-attributes

如果我有这样的课程

[Attr("Blah",
 Data = "Blah")]
public class Test : SuperClass{}

有没有办法可以在运行时更改类实例的属性值?例如在伪代码中

SuperClass test = new Test();
test.Attr.Value = "blah1";
test.Attr.Data = "blah2";

(我有一个类的实例,我想更改属性,强制转换为扩展的类)

2 个答案:

答案 0 :(得分:3)

属性和对象实例之间没有隐式连接。仅在类和属性之间。最好的办法是在构造函数中查找属性并“缓存”对象属性中的值。当然,如果您只查看Test类,那就没有意义,但如果SuperClass的构造函数在“this”检索到的类型上查找自定义属性,则确实有意义。的GetType()”。

答案 1 :(得分:0)

您可以在运行时在类级别(而不是对象实例级别)更改属性值:

var attr = TypeDescriptor.GetProperties(typeof(UserContact))["UserName"].Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute;
attr.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(attr, username_readonly);