2008-10-16 12 views
6

Eventuali duplicati:
Most Useful Attributes in C#Esistono altri attributi utili per le proprietà C#?

inoltre:

[DefaultValue(100)] 
[Description("Some descriptive field here")] 
public int MyProperty{get; set;} 

Quali altri # Attributi C sono utili per le proprietà, dopo aver appreso questi mi sento come sto perdendo.

Domande correlate

Most Useful Attributes in C#

+0

Questo è così vicino da essere duplicato con il link Mitchel Sellers appena messo in questione. Quali attributi o classi successivi, utili. enumerazione, ecc .: P –

risposta

2
[Browsable] 

è uno dei miei preferiti. (MSDN)

+0

'[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]' è qualcosa che uso spesso insieme a BrowsableAttribute. – newman

7
[Obsolete("This is an obsolete property")] 

Questo è uno dei miei preferiti. Consente di contrassegnare una proprietà/metodo obsoleto, che causerà un avviso del compilatore (facoltativamente, un errore del compilatore) durante la compilazione.

+0

+1 Quasi dici questo, ma questo attributo è utile anche come nota al programmatore durante lo sviluppo. –

2

Ho desiderato un elenco completo di attributi C# per un lungo periodo di tempo, ma non ho mai trovato un elenco nei documenti MSDN o ovunque. Penso che questa sia una delle parti più deboli per la loro documentazione.

Io uso [XmlIgnore] se voglio escludere una proprietà dalla serializzazione xml.

+1

La documentazione per la classe "Attributo" li ha tutti perché vengono visualizzate le classi ereditarie;) http://msdn.microsoft.com/en-us/library/system.attribute.aspx – FunctorSalad

0

Se si utilizza il Description e Category in multilingue interfacce utente, allora si possono trovare utili le versioni basate sulle risorse (riflessa dal System.Windows.Forms):

[AttributeUsage(AttributeTargets.All)] 
internal sealed class SRDescriptionAttribute : DescriptionAttribute 
{ 
    private bool replaced; 

    public SRDescriptionAttribute(string description) : base(description) 
    { 
    } 

    public override string Description 
    { 
     get 
     { 
      if (!this.replaced) 
      { 
       this.replaced = true; 
       base.DescriptionValue = SR.GetString(base.Description); 
      } 
      return base.Description; 
     } 
    } 
} 

[AttributeUsage(AttributeTargets.All)] 
internal sealed class SRCategoryAttribute : CategoryAttribute 
{ 
    public SRCategoryAttribute(string category) : base(category) 
    { 
    } 

    protected override string GetLocalizedString(string value) 
    { 
     return SR.GetString(value); 
    } 
} 

dove SR è un wrapper per l'appropriata ResourceManager .

0

Lo uso abbastanza spesso nelle enumerazioni. Hai mai quel valore "predefinito" o "sconosciuto" in un enum, ma non vuoi necessariamente legato a un controllo, come un menu a discesa? Aggiungi un attributo personalizzato o utilizza uno esistente per rappresentare elementi che dovrebbero/non dovrebbero essere visibili.

Lavoro molto con framework che hanno broker di eventi e policy injection, e gli attributi sono inestimabili quando si tratta di decorare eventi con metadati extra o eventi che si accoppiano liberamente.

Ci sono alcuni strumenti abbastanza nuovi come PostSharp (http://www.postsharp.org/) che è possibile utilizzare per incapsulare il comportamento all'interno degli attributi. Coppia buoni esempi su quel sito; è incredibile quanto tu possa semplificare il codice attraverso questi schemi. . .

3

Solo pochi ...

sincronizzazione, inline, ecc: il modello

[MethodImpl] 

componente:

[TypeDescriptor], [DisplayName], [Editor] 

serializzazione:

[Serializable], [DataMember], [XmlElement], [XmlAttribute], [NonSerialized], etc 

sicurezza dichiarativa:

[PrincipalPermission] 

tutte le cose COM ...