using System; namespace Recetas.Cap03 { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false)] public class AutorAttribute : Attribute { private string organizacion; private string nombre; // Constructor público: public AutorAttribute (string nombre) { this.nombre = nombre; organizacion = String.Empty; } // Accede y modifica el nombre de la organización: public string Organizacion { get { return organizacion; } set { organizacion = value; } } // Propiedad de sólo lectura (campo opcional): public string Nombre { get { return nombre; } } } [AutorAttribute("Edward")] [AutorAttribute("Germán", Organizacion = "OrtizOL")] public class Reporte { } public sealed class ConsultaAutorAttribute { public static void Main() { // Obtención del tipo: Type tipo = typeof (Reporte); // Recuperación arreglo con los atributos aplicados a `Reporte`: object[] atributos = tipo.GetCustomAttributes(typeof(AutorAttribute), true); // Enumera los atributos aplicados a `Reporte`: foreach (AutorAttribute atributo in atributos) { Console.WriteLine ("Nombre: {0} - Organización: {1}", atributo.Nombre, atributo.Organizacion); } } } }