2009-09-01 72 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语句将枚举给定类型的所有属性并查找该属性。