繁体   English   中英

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

[英]Getting custom attributes that were set outside the class

假设我有一个名为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
        }
}

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

这将取决于属性的使用方式(如果它在类,属性,方法等上)。 例如,如果仅在类上使用它,则可以使用以下代码获取标记有属性的所有类型:

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

如果仅在属性上使用它(如您的示例),则可以嵌套一个附加的foreach语句,该语句将枚举给定类型的所有属性并查找该属性。

简短答案:您不能,或者至少不应该。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM