在运行时更改类属性中的值

7
如果我有这样一个类
[Attr("Blah",
 Data = "Blah")]
public class Test : SuperClass{}

有没有一种方法可以在运行时更改类实例的属性值?例如,伪代码中的操作。
SuperClass test = new Test();
test.Attr.Value = "blah1";
test.Attr.Data = "blah2";

我有一个类的实例,我想要更改其属性,将其转换为它所继承的类。

可能是在运行时更改属性参数的重复问题。 - Alastair Pitts
我已经看过了,那些是方法属性,类属性似乎不同。至少那个问题对我没有帮助。 - UberMouse
我非常确定您可以在运行时更改它们,因为它们嵌入到程序集的元数据中。 - sa_ddam213
我不想为类更改它们,我只想为类的特定实例更改它们。据我所知,您可以在属性上更改它们,因此我希望可以在类属性上完成这项操作。 - UberMouse
@UberMouse:我链接的问题中评分最高的答案是一个使用类属性的示例。 - Alastair Pitts
它不会更新类实例的属性数据,它只是检索它。我并不完全确定这是可能的。 - UberMouse
2个回答

3

属性与对象实例之间没有隐式连接,只有类和属性之间的联系。最好的方法是在构造函数中查找属性,并在对象的属性上“缓存”值。当然,如果你只看Test类,这样做没有意义,但如果SuperClass的构造函数查找使用“this.GetType()”检索的类型的自定义属性,则这样做是有意义的。


那就不可能了。噢,好吧。 - UberMouse

-1

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

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

这是在类("UserName")上设置属性,而不是在类("UserContact")上设置属性。 问题是设置类属性的值。 - d.popov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接