2008-10-16 11 views
6

Duplicar posibles:
Most Useful Attributes in C#¿Hay algún otro atributo útil para las propiedades de C#?

además:

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

Qué otros C# Los atributos son útiles para Propiedades, después de enterarse de estos me siento como que estoy perdiendo.

preguntas relacionadas

Most Useful Attributes in C#

+0

Esto está tan cerca de ser duplicado con el enlace que Mitchel Sellers acaba de poner en la pregunta. Lo próximo, atributos útiles o clase. enumeración, etc.: P –

Respuesta

2
[Browsable] 

es una de mis favoritas. (MSDN)

+0

'[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]' es algo que a menudo uso junto con BrowsableAttribute. – newman

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

Esa es una de mis favoritas. Le permite marcar una propiedad/método obsoleto, lo que provocará una advertencia del compilador (opcionalmente, un error del compilador) en la compilación.

+0

+1 Casi lo dices, pero este atributo también es útil como nota para el programador durante el desarrollo. –

2

He deseado una lista completa de los atributos de C# durante mucho tiempo, pero nunca he encontrado una lista en los documentos de MSDN ni en ninguna otra parte. Creo que esta es una de las partes más débiles de su documentación.

Uso [XmlIgnore] si deseo excluir una propiedad de la serialización xml.

+1

La documentación de la clase "Atributo" los tiene todos porque se muestran clases inherentes;) http://msdn.microsoft.com/en-us/library/system.attribute.aspx – FunctorSalad

0

Si está utilizando el Description y Category en varios idiomas interfaces de usuario, entonces usted puede encontrar útil las versiones basadas en recursos naturales (que se refleja desde 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); 
    } 
} 

donde SR es una envoltura para la adecuada ResourceManager .

0

Lo uso con bastante frecuencia en las enumeraciones. ¿Alguna vez has tenido ese valor "predeterminado" o "desconocido" en una enumeración, pero no necesariamente quieres vincularlo a un control, como un menú desplegable? Agregue un atributo personalizado o use uno existente para representar elementos que deberían/​​no deberían poder verse.

Trabajo mucho con frameworks que tienen intermediarios de eventos e inyección de políticas, y los atributos son invaluables cuando se trata de decorar eventos con metadatos adicionales o eventos de acoplamiento débil.

Hay algunas herramientas bastante nuevas como PostSharp (http://www.postsharp.org/) que puede usar para encapsular el comportamiento dentro de los atributos. Un par de buenos ejemplos en ese sitio; es increíble cuánto más simple puedes hacer código a través de esos patrones. . .

3

Sólo unos pocos ...

sincronización, inlining, etc:

[MethodImpl] 

componente del modelo:

[TypeDescriptor], [DisplayName], [Editor] 

serialización:

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

seguridad declarativa:

[PrincipalPermission] 

todas las cosas COM ...

Cuestiones relacionadas