21

の代わりにICustomAttributeProvider.GetCustomAttributes()returnが返されるのはなぜですか?object[]Attribute[]

mscorlibの実装を使用し、ICustomAttributeProviderシステム アセンブリが型ではないオブジェクトを返す状況はありAttributeますか?

4

2 に答える 2

23

CLI 仕様 ( ECMA 335 ) パーティション II の条項 21 には、次のように記載されています。

任意のユーザー定義型を属性として使用できますが、CLS 準拠では、属性は基本クラスが である型のインスタンスである必要がありますSystem.Attribute

つまり、CLS に準拠していない言語では、 から派生していない属性を指定できる可能性があるAttributeため、そのGetCustomAttributesような属性を使用できるようにメソッドが設計されている可能性があります。

そのような非 CLS 準拠の言語は存在しないと確信しており、.NET はそれをサポートしていませんが、Reflection の設計者が将来の可能性を排除したくなかったことは想像に難くありません。

2 番目の質問については、 のソース コードを簡単に調べると、System.Reflection常に回答が得られることがわかりますAttribute[]。返されるオブジェクトは常にAttribute[]であるため、安全にキャストできますが、常にそのように動作するという保証はありません。

于 2011-05-08T05:41:50.660 に答える
3

Reflector をざっと見てみると、使用されるすべての場所で Attribute[] への安全なキャストが実行されるため、同じことを行っても安全だと思います。

于 2011-04-28T19:59:08.740 に答える