2013-07-30 12 views
13

Ho lavorato con Reflections e volevo ottenere tutti gli attributi dichiarati per una proprietà. Ci sono due proprietà sotto la classe PropertInfo che sono CustomAttributes e Attributes.Attributi vs. CustomAttributes in PropertyInfo

Secondo la MSDN, essi sono spiegate come segue:

Attributi:

Questa struttura rappresenta gli attributi associati a un utente. Tutti i membri dispongono di un set di attributi definiti in relazione al tipo specifico di membro . Gli attributi di proprietà consentono all'utente di sapere se questa proprietà è la proprietà predefinita, una proprietà SpecialName e quindi su.

Nota: L'esempio di codice riportato nella pagina di PropertyInfo.Attributes non ha nemmeno funziona.

Attributi:

Un array che contiene tutti gli attributi personalizzati applicati a questo membro, o un array con zero elementi se sono definiti attributi.

Tuttavia, quando si esegue questo codice per loro, Attributes restituisce nulla, mentre i rendimenti CustomAttributesRequired.

void Main() 
{ 
    var attributes = typeof(Myproperty).GetProperty("Caption").CustomAttributes; 
    //var attributes = typeof(Myproperty).GetProperty("Caption").Attributes; 
    attributes.Dump(); //Dump is a LinqPad method which dumps everything to the outpu window 
} 

public class Myproperty 
{ 
    private string caption = "Default caption"; 

    [Required] 
    public string Caption 
    { 
     get{return caption;} 
     set {if(caption!=value) {caption = value;} 
     } 
    } 
} 
+0

Fondamentalmente sono significati leggermente diversi della parola "attributo" qui. Sembra che tu voglia CustomAttributes. –

+0

Ho capito che quello che volevo era "CustomAttributes", ma puoi spiegare qual è la differenza? IMO sembra non fare quello che il suo nome implica. – Tarik

+1

Fondamentalmente, vedere la risposta di Hans. Sono cose molto diverse. Guarda MethodInfo.Attributes per un esempio che potrebbe avere più senso per te - è più simile ai modificatori che possono essere applicati a una proprietà/metodo/ecc. –

risposta

16

PropertyInfo.Attributes non ha nulla a che fare con la classe Attribute. Controlla lo PropertyAttributes enumeration per i valori che potresti incontrare. Questi sono dettagli di implementazione CLR che non hanno alcuna connessione ovvia al codice C#. Sì, è stata una scelta sfortunata per nominare.

Per trovare attributi come l'attributo [obbligatorio] è necessario utilizzare la proprietà CustomAttributes.

+0

Allora forse dovrei passare un po 'più di tempo con ILSpy ... – Tarik

Problemi correlati