2011-07-29 14 views
5

属性内にプロパティを添付したクラスとプロパティ名にアクセスする方法はありますか?例属性内のクラスとプロパティ名へのアクセス

public class User { 
    public string Email { get; set; } 
    public string FirstName { get; set; } 

    [MyAttrubute] 
    public string LastName { get; set; } 
} 

そしてMyAttributeクラスの

public class MyAttributeAttribute { 
    public MyAttributeAttribute() : base() { 
     string className = /*GET CLASS NAME - should return "User" */ 
     string propertyName = /*GET PROPERTY NAME - should return LastName*/ 
    } 
} 

については

私は、コンストラクタに情報を渡すことができます知っているが、上のアイコンをクリックすると、いくつかの方法を簡単な方法があると期待して反射を介して何度も何度も情報を再入力してください...

答えて

7

申し訳ありませんが、それはできません。可能性もあります

public class User { 
    public string Email { get; set; } 
    public string FirstName { get; set; } 

    [MyAttrubute] 
    public string LastName { get; set; } 
} 

[MyAttrubute] 
public class OtherClass { 

    [MyAttrubute] 
    public string AnotherProperty { get; set; } 
} 

属性はどこからでも作成できます。でも、次は、インスタンスを作成するための有効な方法は、次のとおりです。

var att = new MyAttribute(); 

ご質問はまで煮詰めすることができ、「私は私のカスタムクラスがインスタンス化されるからどこに検出することができますか?」。私の最後の例では、おそらくStackTraceが使われました。しかし、これらの属性は.NETランタイムによって構築されているため、そのルートにはアクセスできません。

+1

私はあなたの推論に従っているかどうかわかりません(ただし、過大な回答は依然として同じかもしれません)。各属性はMyAttributeクラスの独自のインスタンスであるため、それぞれがコンストラクタでdiffernt値を取り込んでローカルに格納できます。複数のプロパティを飾ることができるという事実は、装飾されたクラス/プロパティを取得できない理由ではありません。私は実行時に属性のこのインスタンスがどのクラス/プロパティを添付しているかを判断する方法があると思った。 – Peter

+0

@Peter - 申し訳ありませんが、私は私の答えを明確にしました。 – CodeNaked

関連する問題