获取在类外部设置的自定义属性

时间:2009-09-01 09:30:47

标签: c# attributes annotations

假设我有一个名为 Data 的类。 另一个类使用某些属性注释其成员之一,类型为 data 。 例如:

public class Example{

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

我正在寻找的是从类 Data 中获取该属性及其包含的数据的方法。我希望能够编写以下代码:

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
        }
}

换句话说,我希望能够使用我班级外指定的自定义属性为特定字段提供默认值。

2 个答案:

答案 0 :(得分: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语句,该语句将枚举给定类型的所有属性并查找属性。

答案 1 :(得分:0)

简短回答:你不能,或者至少你不应该。

DefaultNameAttribute适用于Example类型的成员,该成员与Data类型相关联。可能有多种类型使用Data类型,以及DefaultNameAttribute的多个实例。 Example甚至可以在另一个程序集等中定义。