Perché Attributes.IsDefined () manca sovraccarichi?


165

Ispirato da una domanda SO. La classe Attribute presenta numerosi overload per il metodo IsDefined () . Sono coperti gli attributi applicati a Assembly, Module, MemberInfo, ParameterInfo. Il sovraccarico MemberInfo copre PropertyInfo, FieldInfo, EventInfo, MethodInfo, ConstructorInfo.

Questo si occupa della maggior parte degli AttributeTarget. Tranne un grosso problema: non c'è sovraccarico per Attribute.IsDefined (Type, Type) in modo da poter verificare se un attributo è definito su una classe. O una struttura, delegato o enum per quella materia.

Non che questo sia un vero problema, Type.GetCustomAttributes () può risolverlo. Ma anche tutti i tipi di BlahInfo hanno questo. Mi chiedo la mancanza di simmetria. Non riesco a capire perché questo sarebbe un problema per Type. Indovinare un problema di eredità non me lo spiega. Avere ValueType nel mix potrebbe essere un vantaggio, ma non ha ancora senso. Non compro "hanno dimenticato", non lo fanno mai.

Perché manca questo sovraccarico?

Risposte:


170

C'è un System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)e System.Typederiva da System.Reflection.MemberInfo.

Un assembly, che è il contenitore di livello superiore di qualsiasi assembly .NET, ha uno o più moduli. Ogni modulo contiene quindi tipi e tipi possono avere membri come proprietà, metodi o anche altri tipi (tipi nidificati). Ecco perché System.Typederiva dal MemberInfofatto che il modello a oggetti consente ai tipi di funzionare come contenitori di tutto ciò che è membro, inclusi altri tipi.


Anche il sovraccarico ICustomAttributeProvideravrebbe molto senso.
Mr Anderson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.