Mengapa Attributes.IsDefined () hilang berlebihan?

165

Terinspirasi oleh pertanyaan SO. Kelas atribut memiliki beberapa kelebihan untuk metode IsDefined () . Tercakup adalah atribut yang diterapkan pada Majelis, Modul, MemberInfo, ParameterInfo. Overload MemberInfo mencakup PropertyInfo, FieldInfo, EventInfo, MethodInfo, ConstructorInfo.

Itu menangani sebagian besar Target Attribute. Kecuali untuk satu biggy: tidak ada kelebihan untuk Attribute.IsDefined (Type, Type) sehingga Anda bisa memeriksa apakah atribut didefinisikan pada kelas. Atau struct, delegasi atau enum dalam hal ini.

Bukannya ini masalah nyata, Type.GetCustomAttributes () dapat memperbaikinya. Tetapi semua jenis BlahInfo juga memilikinya. Saya bertanya-tanya pada kurangnya simetri. Saya tidak tahu mengapa ini menjadi masalah untuk Type. Menebak masalah warisan tidak menjelaskannya kepada saya. Memiliki ValueType dalam campuran mungkin menjadi petunjuk, masih tidak masuk akal. Saya tidak membeli "mereka lupa", mereka tidak pernah melakukannya.

Mengapa kelebihan ini hilang?

Hans Passant
sumber

Jawaban:

170

Ada System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)dan System.Typeberasal dari System.Reflection.MemberInfo.

Majelis, yang merupakan wadah tingkat atas dari setiap perakitan .NET memiliki satu atau lebih modul. Setiap modul kemudian berisi tipe dan tipe yang dapat memiliki anggota seperti properti, metode atau bahkan tipe lain (tipe bersarang). Itu sebabnya System.Typeberasal dari MemberInfosehingga model objek memungkinkan untuk jenis untuk bekerja sebagai wadah semua hal anggota, termasuk jenis lainnya.

John Leidegren
sumber
Kelebihan untuk ICustomAttributeProvidermembuat banyak akal juga.
Tn. Anderson