2012-02-19 45 views
1

我在通過.NET 4.0中的反射獲取靜態屬性時遇到了一些麻煩。關於繼承靜態屬性的思考

例如說我有以下類別:

class Foo 
{ 
    public static int MyProperty 
    { 
     get { return 1234; } 
    } 
} 

class Bar : Foo 
{ 

} 

現在,如果我稱之爲:

typeof(Foo).GetProperties(); 

我得到一個屬性, 「myProperty的」 的預期列表。如果相反,我打電話:

typeof(Bar).GetProperties(); 

我什麼也沒得到。不幸的是,我嚴格處理存儲爲Type數據類型的值,所以我不能直接撥打typeof(Foo).GetProperties()

感謝您的幫助!
戈德溫

回答

2

您可以指定BindingFlags.FlattenHierarchy獲得在基類中聲明靜態屬性:

var props = typeof(Bar).GetProperties(BindingFlags.Public | 
             BindingFlags.Static | 
             BindingFlags.FlattenHierarchy); 
+0

就是這樣!謝謝! – Godwin 2012-02-19 04:57:21

0
var prop = typeof (Bar).GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static); 

如果你需要私有財產,你需要添加BindingFlags.NonPublic爲好。見BindingFlags Enumeration