Udostępnij za pośrednictwem


Tworzenie atrybutów niestandardowych (Visual Basic)

Możesz utworzyć własne atrybuty niestandardowe, definiując klasę atrybutów, klasę, która pochodzi bezpośrednio lub pośrednio z Attributeklasy , co sprawia, że identyfikowanie definicji atrybutów w metadanych jest szybkie i łatwe. Załóżmy, że chcesz oznaczyć typy tagami o nazwie programisty, który napisał typ. Możesz zdefiniować niestandardową Author klasę atrybutów:

<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

Nazwa klasy to nazwa atrybutu . Author Pochodzi on z System.Attributeklasy , więc jest to klasa atrybutów niestandardowych. Parametry konstruktora to parametry pozycyjne atrybutu niestandardowego. W tym przykładzie name jest parametrem pozycyjnym. Wszystkie publiczne pola odczytu i zapisu lub właściwości mają nazwane parametry. W tym przypadku version jest jedynym nazwanym parametrem. Zwróć uwagę na użycie atrybutu AttributeUsage , aby Author atrybut był prawidłowy tylko dla klas i Structure deklaracji.

Możesz użyć tego nowego atrybutu w następujący sposób:

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

AttributeUsage ma nazwany parametr , AllowMultipleza pomocą którego można utworzyć atrybut niestandardowy z pojedynczym użyciem lub wieloma zastosowaniami. W poniższym przykładzie kodu jest tworzony atrybut wieloużytkowy.

' multiuse attribute
<System.AttributeUsage(System.AttributeTargets.Class Or
                       System.AttributeTargets.Struct,
                       AllowMultiple:=True)>
Public Class Author
    Inherits System.Attribute

W poniższym przykładzie kodu do klasy są stosowane wiele atrybutów tego samego typu.

<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

Uwaga

Jeśli klasa atrybutów zawiera właściwość, ta właściwość musi być odczyt-zapis.

Zobacz też