如果我有这样的课
[Attr("Blah",
Data = "Blah")]
public class Test : SuperClass{}
有没有办法可以在运行时更改类实例的属性值?例如在伪代码中
SuperClass test = new Test();
test.Attr.Value = "blah1";
test.Attr.Data = "blah2";
(我有一个要更改属性的类的实例,将其转换为它扩展的类)
如果我有这样的课
[Attr("Blah",
Data = "Blah")]
public class Test : SuperClass{}
有没有办法可以在运行时更改类实例的属性值?例如在伪代码中
SuperClass test = new Test();
test.Attr.Value = "blah1";
test.Attr.Data = "blah2";
(我有一个要更改属性的类的实例,将其转换为它扩展的类)
属性和对象实例之间没有隐含的联系。只在类和属性之间。最好的办法是在构造函数中查找属性并“缓存”对象属性中的值。当然,如果您只查看Test
类,那是没有意义的,但是如果构造函数SuperClass
查找使用“this.GetType()”检索的类型的自定义属性,则它确实有意义。
您可以在运行时在类级别(不是对象实例级别)更改属性值:
var attr = TypeDescriptor.GetProperties(typeof(UserContact))["UserName"].Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute;
attr.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(attr, username_readonly);