2011-08-30 145 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 - 因此該屬性不會被覆蓋成員繼承。

我懷疑如果你檢查它是覆蓋一個基本屬性,並繼續工作你的方式繼承鏈,你將能夠發現屬性的方式。誠然,做這種事情有點麻煩。