using System;
class Program
{
static void Main()
{
var p = typeof(MyClass2).GetProperty("Value");
var a = Attribute.GetCustomAttribute(p, typeof(ObsoleteAttribute), true);
Console.WriteLine(a != null);
}
}
public class MyClass
{
[CommandProperty()]
public virtual string Value { get; set; }
}
public class MyClass2 : MyClass
{
public override string Value { get; set; }
}
[AttributeUsage( AttributeTargets.Property, Inherited = true)]
public class CommandPropertyAttribute : Attribute
{
/* ... */
}
PropertyInfo prop = ***The PropertyInfo of MyClass2.Value***;
object[] attrs = prop.GetCustomAttributes( typeofCPA, true );
Attribute at =Attribute.GetCustomAttribute(prop, typeofCPA, true);
if (attrs.Length == 0 && at != null)
{
// Yes this happens.
}
为什么第一次GetCustomAttributes调用没有结果?
答案 0 :(得分:2)
documentation for MemberInfo.GetCustomAttributes(继承到PropertyInfo)状态;
此方法忽略属性和事件的inherit参数。 在属性和属性上搜索继承链中的属性 事件,使用适当的重载 Attribute.GetCustomAttributes方法。
换句话说,(错误的)设计行为。