如何获取属性覆盖属性?

时间:2011-08-30 06:32:56

标签: .net reflection attributes properties virtual

不起作用Attribute.GetCustomAttribute

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
{
    [Obsolete]
    public virtual string Value { get; set; }
}

public class MyClass2 : MyClass
{
    public override string Value { get; set; }
}

输出:错误

为什么?

1 个答案:

答案 0 :(得分:4)

如果您查看ObsoleteAttribute的文档,您会看到其AttributeUsageInherited设置为false - 因此该属性不会被覆盖成员继承。

我怀疑如果你检查它是否覆盖了一个基本属性并继续沿着继承链运行,那么你将能够以这种方式发现属性。诚然,做这种事情有点乱。