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.
Jon, ¿podría traer un ejemplo de "mecanismo de descripción" de una parte ampliamente utilizada de .NET Framework, por favor? – Valentin
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
@ Valentin: [Serializable] –