2014-10-30 46 views
4

我知道typeof(T) == typeof(T)因爲Type對象基本上都是靜態的,每個類類型只有一個Type實例存在(如果這是錯的永遠是真實的,請大家指正...我有幾個程序在這個假設下運作)。威爾的PropertyInfo是從的GetProperties等於的PropertyInfo()

我很難在文檔中找到PropertyInfo對象是否顯示相同的屬性。

我的應用程序是這樣的:

我有一個Reflector<T>類取結果typeof(T).GetProperties(...)和存儲所產生的PropertyInfo對象作爲鍵在字典中。

另外,我有一個表達式分析器,其嘗試解析描述Func<T, TResult>類型的特定屬性的訪問的表達(例如用t => t.SomePropertyTt.GetType()TResultSomeProperty類型)。經過一些計算後,我最終從Expression得到的PropertyInfo對象。

然後將得到的PropertyInfo用作Dictionary.TryGetValue調用中的鍵,以獲取有關存儲在Reflector<T>字典中的屬性的附加數據。

問題

我可以放心,這些來自MemberExpression.MemberPropertyInfo將等於(==)的PropertyInfo同一屬性從Type.GetProperties退回或可能會有兩種不同的PropertyInfo情況下,在現實請參考相同類型的相同屬性?

爲了討論的目的,可以假定該屬性是非虛擬的或者如果它是虛擬的則不被覆蓋。

回答

0

無論屬性是否爲virtual或重寫,派生類型上的PropertyInfo始終都不同於定義它的基本類型上的那個。

使用() => someInstance.SomeProperty形式的lambda表示MemberExpression.Member時,可以從派生類型檢索PropertyInfo。正如我在我的answer over here中發現的,它與您從基本類型本身獲得的PropertyInfo不同。