Neden Attributes.IsDefined () eksik aşırı yükler?


165

SO sorusundan ilham alındı. Attribute sınıfı, IsDefined () yöntemi için birkaç aşırı yüklemeye sahiptir . Derleme, Modül, MemberInfo, ParameterInfo için uygulanan özniteliklerdir. MemberInfo aşırı yükleme özelliği PropertyInfo, FieldInfo, EventInfo, MethodInfo, ConstructorInfo kapsar.

Bu, AttributeTargets'ın çoğunu halleder. Bir biggy dışında: Attribute.IsDefined (Type, Type) için aşırı yük yoktur, böylece sınıfta bir özniteliğin tanımlanıp tanımlanmadığını kontrol edebilirsiniz. Ya da bu konuda bir yapı, delege veya numaralandırma.

Bu gerçek bir sorun değil, Type.GetCustomAttributes () bunu düzeltebilir. Ancak tüm BlahInfo türleri de buna sahiptir. Simetri eksikliğini merak ediyorum. Bunun Type için neden sorun olabileceğine parmak basamıyorum. Kalıtım sorununu tahmin etmek bana açıklamıyor. Karışımda ValueType'ın bulunması bir olası satış olabilir, yine de anlamlı değildir. "Unuttular" satın almıyorum, asla yapmıyorlar.

Bu aşırı yükleme neden eksik?

Yanıtlar:


170

Bir vardır System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)ve System.Typetüretilmiştir System.Reflection.MemberInfo.

Herhangi bir .NET derlemesinin en üst düzey kapsayıcısı olan bir derlemenin bir veya daha fazla modülü vardır. Her modül daha sonra türler ve türler içerir, özellikler, yöntemler veya hatta diğer türler (iç içe türler) gibi üyelere sahip olabilir. Bu nedenle , nesne modeli, türlerin diğer türler de dahil olmak üzere her şeyi üyeler olarak kapsayıcı olarak çalışmasına izin verecek şekilde System.Typekaynaklanır MemberInfo.


Aşırı yükleme de ICustomAttributeProviderçok mantıklı olurdu.
Bay Anderson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.