2011-04-28 73 views

回答

22

的CLI規範(ECMA 335)分區Ⅱ,第21層的狀態的部分:

雖然 任何用戶定義的類型可以用來作爲一個屬性,CLS遵守需要 類型的屬性將是實例其基類是System.Attribute

換句話說,這是不是一種語言符合CLS可能允許您指定不從Attribute派生屬性,所以GetCustomAttributes方法可能設計爲允許消耗這樣的屬性。

我敢肯定,沒有這樣的非CLS兼容的語言存在,而.NET不支持它,但可以想見的是反思的設計者不想排除在未來的可能性。

至於你的第二個問題,快速檢查System.Reflection的源代碼表明你總是得到一個Attribute[]回來。由於返回的對象始終爲Attribute[],因此您可以安全地投射它們,但不能保證它始終以此方式工作。

3

通過快速瀏覽Reflector,在每個使用它們的地方,它們都會執行到Attribute []的安全轉換,所以我認爲對於您來說這樣做是安全的。

+0

你能指出這個的任何特定實例嗎? – Gabe 2011-05-08 04:21:22

相關問題