Crear atributos personalizados (C# y Visual Basic)

Puede crear sus propios atributos personalizados definiendo una clase de atributos, 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 tipos con el nombre del programador que los escribió. Podría definir una clase de atributos personalizados Author:

<System.AttributeUsage(System.AttributeTargets.Class Or 
                       System.AttributeTargets.Struct)> 
Public Class Author
    Inherits System.Attribute
    Private name As String
    Public version As Double
    Sub New(ByVal authorName As String)
        name = authorName
        version = 1.0
    End Sub
End Class
[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 atributos personalizados. Los parámetros del constructor son los parámetros posicionales del atributo personalizado. En este ejemplo, name es un parámetro posicional. 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 que el atributo Author sólo sea válido en las declaraciones de clase y struct (Structure en Visual Basic).

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

<Author("P. Ackerman", Version:=1.1)> 
Class SampleClass
    ' P. Ackerman's code goes here...
End Class
[Author("P. Ackerman", version = 1.1)]
class SampleClass
{
    // P. 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. En el ejemplo de código siguiente se crea un atributo multiuso.

' multiuse attribute
<System.AttributeUsage(System.AttributeTargets.Class Or 
                       System.AttributeTargets.Struct, 
                       AllowMultiple:=True)> 
Public Class Author
    Inherits System.Attribute
[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct,
                       AllowMultiple = true)  // multiuse attribute
]
public class Author : System.Attribute

En el ejemplo de código siguiente varios atributos del mismo tipo se aplican a una clase.

<Author("P. Ackerman", Version:=1.1), 
Author("R. Koch", Version:=1.2)> 
Class SampleClass
    ' P. Ackerman's code goes here...
    ' R. Koch's code goes here...
End Class
[Author("P. Ackerman", version = 1.1)]
[Author("R. Koch", version = 1.2)]
class SampleClass
{
    // P. Ackerman's code goes here...
    // R. Koch's code goes here...
}

Nota

Si su clase de atributos contiene una propiedad, dicha propiedad debe ser de lectura y escritura.

Vea también

Referencia

Reflexión (C# y Visual Basic)

Atributos (C# y Visual Basic)

Obtener acceso a los atributos mediante la reflexión (C# y Visual Basic)

System.Reflection

AttributeUsage (C# y Visual Basic)

Conceptos

Guía de programación de C#

Escribir atributos personalizados

Otros recursos

Guía de programación en Visual Basic