2009-09-01 16 views
0

という名前のクラスがあり、データがあるとします。 別のクラスは、メンバの1つに、データの属性を持つ型のアノテーションを付けます。たとえば は:私が探している、クラスデータの中から、方法ですクラス外に設定されたカスタム属性の取得

public class Example{ 

    [DefaultNameAttribute("default name")] 
    public Data Name{get;set} 
} 

その属性とそれに含まれるデータを取得します。私は私のクラスの外に指定されたカスタム属性を使用して、特定のフィールドにデフォルト値を与えることができるようにしたい、つまり

public class Data{ 
    private string _name = null; 
    public string Name{ 
     get{ 
      if (_name != null) return _name; 
      return (getDefaultNameFromAnnotation(this));//this is the method I'm looking for 
     } 
} 

:私は、次のようなコードを書くことができるようにしたいです。

答えて

0

短い答え:あなたはできません、または少なくとも、するべきではありません。

DefaultNameAttributeは、Dataタイプから非相関化されたExampleタイプのメンバーに適用されます。 Dataタイプを使用するいくつかのタイプと、DefaultNameAttributeのいくつかのタイプがあります。 Exampleは、別のアセンブリなどで定義することさえできます。

0

属性がどのように使用されるか(クラス、プロパティ、メソッドなどにある場合)によって異なります。それが唯一あなたが巣、その後、(あなたの例など)の性質上でき使用されている場合

public IEnumerable<Type> GetTypes(Assembly assembly) 
{ 
    foreach(Type type in assembly.GetTypes()) 
    { 
     if (type.GetCustomAttributes(typeof(DefaultNameAttribute), true).Length > 0) 
     { 
      yield return type; 
     } 
    } 
} 

:それはクラスのみに使用されている場合たとえば、次のコードを使用して属性でマークされているすべての種類を得ることができます特定のタイプのすべてのプロパティを列挙し、その属性を検索する追加のforeachステートメント。

関連する問題