IcustomattributeProvider.getCustomattributes()が属性[]の代わりに[]を返すのはなぜですか?
-
26-10-2019 - |
質問
なぜ ICustomAttributeProvider.GetCustomAttributes()
戻る object[]
それ以外の Attribute[]
?
使用する際の状況はありますか ICustomAttributeProvider
MSCORLIBおよびシステムアセンブリからの実装は、タイプのないオブジェクトを返します Attribute
?
解決
CLIスペック(ECMA 335)パーティションII、条項21状態の一部:
ユーザー定義のタイプは属性として使用できますが、CLSコンプライアンスでは、属性が基本クラスがあるタイプのインスタンスであることが必要です。
System.Attribute
.
言い換えれば、CLSに準拠していない言語では、派生していない属性を指定できる場合があります。 Attribute
, 、だから GetCustomAttributes
メソッドは、おそらくそのような属性を消費できるように設計されています。
このような非CLSに準拠した言語は存在しないと確信しており、.NETはそれをサポートしていませんが、リフレクションのデザイナーが将来の可能性を排除したくないと想像できます。
2番目の質問に関しては、ソースコードの迅速な検査 System.Reflection
あなたが常に得ることを示しています Attribute[]
戻る。返されたオブジェクトは常にあるので Attribute[]
, 、安全にキャストすることができますが、常にそのように機能するという保証はありません。
他のヒント
リフレクターで簡単に見ることで、あらゆる場所で使用されている場所で安全なキャストを実行して属性を実行します。そのため、同じことをするのは安全だと思います。