[英]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.