Compartir a través de


Crear atributos personalizados (Guía de programación de C#)

Actualización: Julio de 2008

Puede crear sus propios atributos personalizados definiendo una clase de atributo, una clase que se deriva directa o indirectamente de Attribute, lo cual permite identificar definiciones de atributos en metadatos de forma rápida y sencilla. Suponga que desea etiquetar clases y estructuras con el nombre del programador que escribió la clase o estructura. Podría definir una clase de atributo personalizado Author:

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct)
]
public class Author : System.Attribute
{
    private string name;
    public double version;

    public Author(string name)
    {
        this.name = name;
        version = 1.0;
    }
}

El nombre de la clase es el nombre del atributo, Author. Se deriva de System.Attribute, por lo tanto, se trata de una clase de atributo personalizado. Los parámetros del constructor son los parámetros posicionales del atributo personalizado, en este caso, name, mientras que cualquier propiedad o campo público de lectura y escritura es un parámetro con nombre, en este caso, version es el único parámetro con nombre. Observe el uso del atributo AttributeUsage para validar el atributo Author sólo en las declaraciones de class y struct.

Podría utilizar este nuevo atributo de la siguiente forma:

[Author("H. Ackerman", version = 1.1)]
class SampleClass
{
    // H. Ackerman's code goes here...
}

AttributeUsage tiene un parámetro con nombre, AllowMultiple, con el que se puede hacer que un atributo personalizado sea de un solo uso o bien multiuso.

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct,
                       AllowMultiple = true)  // multiuse attribute
]
public class Author : System.Attribute
[Author("H. Ackerman", version = 1.1)]
[Author("M. Knott", version = 1.2)]
class SampleClass
{
    // H. Ackerman's code goes here...
    // M. Knott's code goes here...
}
Nota:

Si su clase de atributos contiene una propiedad, dicha propiedad debe ser de lectura y escritura. No se admiten propiedades de solo escritura en las clases de atributos de C#.

Vea también

Conceptos

Guía de programación de C#

Referencia

Reflexión (Guía de programación de C#)

Atributos (Guía de programación de C#)

Utilizar atributos (Guía de programación de C#)

Eliminar la ambigüedad de los destinos de atributos (Guía de programación de C#)

Acceso a atributos mediante reflexión (Guía de programación de C#)

System.Reflection

Historial de cambios

Fecha

Historial

Motivo

Julio de 2008

Se ha agregado una nota sobre la compatibilidad de las propiedades.

Corrección de errores de contenido.