の代わりにICustomAttributeProvider.GetCustomAttributes()
returnが返されるのはなぜですか?object[]
Attribute[]
mscorlibの実装を使用し、ICustomAttributeProvider
システム アセンブリが型ではないオブジェクトを返す状況はありAttribute
ますか?
の代わりにICustomAttributeProvider.GetCustomAttributes()
returnが返されるのはなぜですか?object[]
Attribute[]
mscorlibの実装を使用し、ICustomAttributeProvider
システム アセンブリが型ではないオブジェクトを返す状況はありAttribute
ますか?
CLI 仕様 ( ECMA 335 ) パーティション II の条項 21 には、次のように記載されています。
任意のユーザー定義型を属性として使用できますが、CLS 準拠では、属性は基本クラスが である型のインスタンスである必要があります
System.Attribute
。
つまり、CLS に準拠していない言語では、 から派生していない属性を指定できる可能性があるAttribute
ため、そのGetCustomAttributes
ような属性を使用できるようにメソッドが設計されている可能性があります。
そのような非 CLS 準拠の言語は存在しないと確信しており、.NET はそれをサポートしていませんが、Reflection の設計者が将来の可能性を排除したくなかったことは想像に難くありません。
2 番目の質問については、 のソース コードを簡単に調べると、System.Reflection
常に回答が得られることがわかりますAttribute[]
。返されるオブジェクトは常にAttribute[]
であるため、安全にキャストできますが、常にそのように動作するという保証はありません。
Reflector をざっと見てみると、使用されるすべての場所で Attribute[] への安全なキャストが実行されるため、同じことを行っても安全だと思います。