Mientras que el código para crear una costumbre Attribute es bastante simple, es mucho más importante que usted entienda lo que son atributos:
atributos son metadatos recopilados en su programa. Los atributos en sí mismos no agregan ninguna funcionalidad a una clase, propiedad o módulo, solo datos. Sin embargo, al usar la reflexión, se pueden aprovechar esos atributos para crear funcionalidad.
Así que, por ejemplo, echemos un vistazo a Validation Application Block, desde Enterprise Library. Si nos fijamos en un ejemplo de código, verá:
/// <summary>
/// blah blah code.
/// </summary>
[DataMember]
[StringLengthValidator(8, RangeBoundaryType.Inclusive, 8, RangeBoundaryType.Inclusive, MessageTemplate = "\"{1}\" must always have \"{4}\" characters.")]
public string Code { get; set; }
Desde el fragmento anterior, uno podría suponer que El código siempre será validado, siempre que sea cambiado, de acuerdo a las reglas del Validador (en el ejemplo, tener al menos 8 caracteres y como máximo 8 caracteres). Pero la verdad es que el atributo no hace nada, solo agrega metadatos a la propiedad.
Sin embargo, Enterprise Library tiene un método Validation.Validate
que examinará su objeto, y para cada propiedad, comprobará si el contenido infringe la regla informada por el atributo.
Por lo tanto, así es como debería pensar en los atributos, una forma de agregar datos a su código que luego podrían ser utilizados por otros métodos/clases/etc.
realmente me gusta la respuesta y especialmente ", una pregunta más puedo poner la misma condición en la declaración del conjunto del código anterior así que ¿cómo se diferencia de las atribuciones, –
@slash: ¿Puedes volver a formular eso? No entendí la pregunta. –
Creo que la barra indicaba la diferencia entre usar los atributos y poner el código de validación real dentro del setter de la propiedad. Respuesta: Al escribir código dentro del setter se puede hacer para validar el valor, usando solo atributos no se validará como tal Los atributos son solo "metadatos". Otro código en otro lugar debería interesarle en los atributos que utiliza, leerlos y realizar acciones basadas en ellos. Un ejemplo típico es una biblioteca de validación, como se mencionó en @BrunoBrant. – romar