2012-04-24 16 views
0

属性を使用してプロパティ値を設定する方法はありますか?ビューモデルでは私が持っているpropety:属性を使用してboolプロパティを設定する

public bool HasAccess{get;set;} 

をし、このような何かをしたいと思います:

[MyAttribute] 
public bool HasAccess{get;set;} 

をそしてMyAttributeがHasAccessの値を設定する必要があります。私の質問は、MyAttributeをどこに構築するかです。HasAccessの値を属性内の値に設定します。

+2

これは意味をなさないものであり、正確に属性が何であるか、そして正しく使用する方法について深く混乱していると感じています。あなたが実際に達成しようとしていることを教えてください。 – asawyer

+0

たぶん私は明確な説明をしなかったでしょう、私はDefaultValueAttributeと同じことを達成しようとしていますが、属性が設定されている属性値を設定します – user282807

+1

それはその属性の仕組みではありません。 http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx "DefaultValueAttribute"は、属性の値でメンバを自動的に初期化することはありません。コード。" – asawyer

答えて

2

属性は、タイプに関連付けられています。これは、Type.GetProperty()とPropertyInfo.GetCustomAttributes()によって見つけられます。これは、オブジェクトのプロパティ値を設定するのに役立ちません。 HasAccessが静的でない限り、それはそれを見ません。つまり、PropertyInfo.SetValue()の最初の引数の値を指定することはできません。

既にオブジェクト参照がある場合は問題ありません。そのGetType()メソッドを使用して、オブジェクトをSetValueに渡します。しかし、それは属性クラスではなく他の場所でのコードです。

+0

アトリビュートはタイプに関連付けられているだけでなく、メンバ(この場合のような)、パラメータなどにも関連付けられています。これらは、インターフェイスインラインテーブルの行などの内部専用コンストラクトでも有効です。 –

+0

さて、「型定義」を入力してください。同じことを意味する。 –

+0

アトリビュートはアセンブリだけでなくタイプにも適用できます。より技術的には、属性は、タイプに関連付けられたトークンだけでなく、多くの異なるECMA335トークンと関連付けることができます。 –

関連する問題