2011-08-30 128 views
4

不工作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; } 
} 

输出:假

为什么?

+0

如果在获取属性时将MyClass2更改为MyClass,会发生什么情况? –

+0

在这种情况下工作正常。 – wizard

回答

4

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

我怀疑如果你检查它是覆盖一个基本属性,并继续工作你的方式继承链,你将能够发现属性的方式。诚然,做这种事情有点麻烦。