2009-06-26 11 views
1

クラス内のフィールドのカスタム属性にアクセスしたいとします。フィールドコンストラクタ中にフィールドに配置された属性にアクセスしたいと思います。これは可能ですか?コンストラクタ内のカスタム属性を使用する - C#

編集06/28/09 以下の擬似コードのようなもの

class SpecialInt

{

int _intVal; 
int _maxVal; 
public SpecialInt() 
{ 
    //Get attribute for the instantiated specialint 
    _maxVal = GetAttribute("MaxValue") 

} }

class main()

{

[MaxValue(100)] 
SpecialInt sInt; 
public main() 
{ 
    sInt = new SpecialInt() 
} 

}

答えて

6

確かにこれが可能です。属性はメタデータに格納され、オブジェクトの構築中に簡単にアクセスできます。

public class Foo { 
    [Something] 
    public int Field1; 

    public Foo() { 
    FieldInfo fi = typeof(Foo).GetField("Field1"); 
    SomethingAttribute si = (SomethingAttribute)fi.GetCustomAttribute(typeof(SomethingAttribute),false)[0]; 
    // grab any Custom attribute off of Fiield1 here 
    } 
} 
+0

私は何とかしたいと思っています。 class SpecialInt { int _intVal; int _maxVal; パブリックSpecialInt() {//インスタンス化specialintの属性取得 _maxVal =のgetAttribute( "MaxValueを") }} クラスのmain(){ [MaxValueを(100)] SpecialInt SINT。 公共のmain(){ シント=新しいSpecialInt() }} そしてSpecialIntのコンストラクタは、それに適用される属性を知っている必要があります。 –

1

どこからでもテストできます。コンパイル時に、その型のメタデータに属性が挿入されます。フィールドプロパティにアクセスするために型をインスタンス化する必要はありません。

関連する問題