2009-09-01 95 views
0

假設我有一個名爲的數據類型的數據。 另一個類註解其成員之一,類型數據,具有一些屬性。 例如:獲取在類別外設置的自定義屬性

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應用於Example類型的成員,該成員類型與Data類型解相關。可能有幾種類型使用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語句將枚舉給定類型的所有屬性並查找該屬性。