爲什麼ICustomAttributeProvider.GetCustomAttributes()
返回object[]
而不是Attribute[]
?爲什麼ICustomAttributeProvider.GetCustomAttributes()返回object []而不是Attribute []?
使用mscorlib的ICustomAttributeProvider
實現時是否有任何情況,並且系統程序集將返回非類型爲Attribute
的對象?
爲什麼ICustomAttributeProvider.GetCustomAttributes()
返回object[]
而不是Attribute[]
?爲什麼ICustomAttributeProvider.GetCustomAttributes()返回object []而不是Attribute []?
使用mscorlib的ICustomAttributeProvider
實現時是否有任何情況,並且系統程序集將返回非類型爲Attribute
的對象?
的CLI規範(ECMA 335)分區Ⅱ,第21層的狀態的部分:
雖然 任何用戶定義的類型可以用來作爲一個屬性,CLS遵守需要 類型的屬性將是實例其基類是
System.Attribute
。
換句話說,這是不是一種語言符合CLS可能允許您指定不從Attribute
派生屬性,所以GetCustomAttributes
方法可能設計爲允許消耗這樣的屬性。
我敢肯定,沒有這樣的非CLS兼容的語言存在,而.NET不支持它,但可以想見的是反思的設計者不想排除在未來的可能性。
至於你的第二個問題,快速檢查System.Reflection
的源代碼表明你總是得到一個Attribute[]
回來。由於返回的對象始終爲Attribute[]
,因此您可以安全地投射它們,但不能保證它始終以此方式工作。
通過快速瀏覽Reflector,在每個使用它們的地方,它們都會執行到Attribute []的安全轉換,所以我認爲對於您來說這樣做是安全的。
你能指出這個的任何特定實例嗎? – Gabe 2011-05-08 04:21:22