7

こんなクラスあったら

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

実行時にクラスのインスタンスの属性の値を変更する方法はありますか? たとえば、擬似コードで

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

(属性を変更したいクラスのインスタンスがあり、それが拡張するクラスとしてキャストされます)

4

2 に答える 2

3

属性とオブジェクト インスタンスの間には暗黙的な関係はありません。クラスと属性の間のみ。最善の策は、コンストラクターで属性を探し、オブジェクトのプロパティの値を「キャッシュ」することです。もちろん、Testクラスだけを見ている場合は意味がありませんが、のコンストラクターがSuperClass「this.GetType()」で取得した型のカスタム属性を探す場合は意味があります。

于 2013-03-13T02:50:55.460 に答える
-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);
于 2013-11-05T11:49:14.887 に答える