2009-02-16 12 views
10

¿Hay casos específicos en los que se deberían usar atributos personalizados en clase en lugar de propiedades? Sé que las propiedades son preferibles debido a su descubrimiento y rendimiento, pero los atributos ... ¿Cuándo debería definitivamente usarlos?Cuándo usar atributos en lugar de propiedades?

ACTUALIZACIÓN:

Here es un puesto de Eric Lippert sobre esta decisión.

Respuesta

12

Eric Lippert tiene un great blog post abordando exactamente esta decisión.

Su resumen es: Atributos de uso para describir sus mecanismos, utilizar las propiedades para modelar el dominio:

En resumen.

También agregaría la consideración de que el valor de un atributo es efectivamente estático, en otras palabras, es parte de la descripción del tipo en lugar de cualquier instancia del tipo.

Una parte engañosa puede venir cuando cada instancia de algún tipo base debe tener una propiedad (por ejemplo, una descripción) pero diferentes tipos derivados concretos desean especificar descripciones por tipo y no por instancia. A menudo termina con propiedades virtuales que siempre devuelven constantes; esto no es muy satisfactorio. Sospecho que las referencias de clase de Delphi podrían ayudar aquí ... no estoy seguro.

EDITAR: Para dar un ejemplo de mecanismo, si decora un tipo para decir de qué tabla proviene la base de datos, eso describe el mecanismo de transferencia de datos en lugar de decir nada sobre el modelo de datos que se está transfiriendo.

+0

Jon, ¿podría traer un ejemplo de "mecanismo de descripción" de una parte ampliamente utilizada de .NET Framework, por favor? – Valentin

+0

Puede que esté editando su pregunta ahora mismo, pero podría agregar el enlace a la publicación del blog: http://blogs.msdn.com/ericlippert/archive/2009/02/02/properties-vs-attributes.aspx – VonC

+0

@ Valentin: [Serializable] –

0

Hay dos casos de uso:

1) Usando un atributo personalizado que alguien ha definido, como el atributo System.LoaderOptimization que puede usarse en el método principal. Este tipo de atributos se utilizan para dirigir código de plataforma como CLR, WPF, WCF o el depurador para ejecutar el código de cierta manera, y puede ser muy útil a veces. Leer libros sobre diversos temas de plataforma es una buena forma de aprender cuándo y cómo usar estos atributos.

2) Creando su propio atributo personalizado y usándolo para decorar una clase (o método, propiedad, etc.). Estos no tienen ningún efecto a menos que también tenga un código que use Reflection para observar los usos de los atributos y cambiar el comportamiento de alguna manera. Este uso debe evitarse siempre que sea posible debido a un rendimiento muy bajo, órdenes de magnitud mayores que, por ejemplo, acceder a un miembro estático de una clase.

Cuestiones relacionadas