Compartir a través de


Crear atributos personalizados (Visual Basic)

Puede crear sus propios atributos personalizados definiendo una clase de atributo, una clase que deriva directa o indirectamente de Attribute, lo que facilita la identificación de definiciones de atributos en metadatos de forma rápida y sencilla. Supongamos que desea etiquetar tipos con el nombre del programador que escribió el tipo. Puede definir una clase de atributo personalizada 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

El nombre de clase es el nombre del atributo, Author. Se deriva de System.Attribute, por lo que es una clase de atributo personalizada. Los parámetros del constructor son los parámetros posicionales del atributo personalizado. En este ejemplo, name es un parámetro posicional. Los campos o propiedades de lectura y escritura públicos son parámetros con nombre. En este caso, version es el único parámetro con nombre. Tenga en cuenta el uso del atributo AttributeUsage para que el atributo Author sea válido solo en las clases y declaraciones de Structure.

Puede usar este nuevo atributo de la siguiente manera:

<Author("P. Ackerman", Version:=1.1)>
Class SampleClass
    ' P. Ackerman's code goes here...
End Class

AttributeUsage tiene un parámetro con nombre, AllowMultiple, con el que puede crear un atributo personalizado de uso único o 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

En el ejemplo de código siguiente, se aplican varios atributos del mismo tipo 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

Nota:

Si la clase de atributo contiene una propiedad , esa propiedad debe ser de lectura y escritura.

Consulte también