2016-07-25 36 views
0

我的問題涉及對屬性的繼承屬性的檢查。Attribute.IsDefined vs MemberInfo.IsDefined - 繼承參數的差異

this Question描述的方法Attribute.IsDefined(MemberInfo, Type, Boolean)(1)MemberInfo.IsDefined(Type, Boolean)(2)基本上是相同的。兩者都在檢查是否使用屬性。但在繼承參數嚴重區別,如果我想查一個屬性:

(1):

如果爲true,指定同時搜索元素的祖先自定義屬性。

(2):

真搜索該成員的繼承鏈找到的屬性;否則,是錯誤的。 對於屬性和事件,此參數被忽略;見備註。

(備註只推薦(1)的使用)

It's沒有問題,使用(1)獲得財產的繼承屬性。但我的問題是爲什麼:爲什麼這個功能是這樣實現的?這是什麼原因,用途或好處?從我的觀點來看,有一種方法忽略了一個參數,這並不是一個乾淨的解決方案。

我忽略了什麼?

回答

2

我的猜測(和它沒有更多的猜測) - 原因是向後兼容。

PropertyInfo.IsDefinedEventInfo.IsDefined忽略了參數inherit,因爲它們是在.NET 1.0中引入的。在.NET 2.0中引入了Attribute上的靜態方法,並對其進行了修改以支持屬性和事件的繼承。如果他們要改變這種行爲,那麼將inherit設置爲true的舊代碼可能會開始獲取意外的屬性。

只是BCL許多不一致之一... :)