Bagikan melalui


Mengakses Atribut dengan Menggunakan Pantulan (Visual Basic)

Fakta bahwa Anda dapat menentukan atribut kustom dan menempatkannya dalam kode sumber Anda akan bernilai kecil tanpa beberapa cara untuk mengambil informasi tersebut dan bertindak di atasnya. Dengan menggunakan pantulan, Anda dapat mengambil informasi yang ditentukan dengan atribut kustom. Metode kuncinya adalah GetCustomAttributes, yang mengembalikan array objek yang setara dengan run-time atribut kode sumber. Metode ini memiliki beberapa versi yang kelebihan beban. Untuk informasi selengkapnya, lihat Attribute .

Spesifikasi atribut seperti:

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

secara konseptual setara dengan ini:

Dim anonymousAuthorObject As Author = New Author("P. Ackerman")
anonymousAuthorObject.version = 1.1

Namun, kode tidak dijalankan sampai SampleClass dikueri untuk atribut. Memanggil GetCustomAttributes pada SampleClass menyebabkan objek Author dibangun dan diinisialisasi seperti di atas. Jika kelas memiliki atribut lain, objek atribut lain akan dibangun dengan cara yang sama. GetCustomAttributes kemudian mengembalikan Author objek dan objek atribut lainnya dalam array. Anda kemudian dapat melakukan iterasi melalui array ini, menentukan atribut apa yang diterapkan berdasarkan jenis setiap elemen array, dan mengekstrak informasi dari objek atribut.

Contoh

Berikut adalah contoh lengkapnya. Atribut kustom didefinisikan, diterapkan ke beberapa entitas, dan diambil melalui pantulan.

' Multiuse attribute
<System.AttributeUsage(System.AttributeTargets.Class Or
                       System.AttributeTargets.Struct,
                       AllowMultiple:=True)>
Public Class Author
    Inherits System.Attribute
    Private name As String
    Public version As Double
    Sub New(ByVal authorName As String)
        name = authorName

        ' Default value
        version = 1.0
    End Sub

    Function GetName() As String
        Return name
    End Function
End Class

' Class with the Author attribute
<Author("P. Ackerman")>
Public Class FirstClass
End Class

' Class without the Author attribute
Public Class SecondClass
End Class

' Class with multiple Author attributes.
<Author("P. Ackerman"), Author("R. Koch", Version:=2.0)>
Public Class ThirdClass
End Class

Class TestAuthorAttribute
    Sub Main()
        PrintAuthorInfo(GetType(FirstClass))
        PrintAuthorInfo(GetType(SecondClass))
        PrintAuthorInfo(GetType(ThirdClass))
    End Sub

    Private Shared Sub PrintAuthorInfo(ByVal t As System.Type)
        System.Console.WriteLine("Author information for {0}", t)

        ' Using reflection
        Dim attrs() As System.Attribute = System.Attribute.GetCustomAttributes(t)

        ' Displaying output
        For Each attr In attrs
            Dim a As Author = CType(attr, Author)
            System.Console.WriteLine("   {0}, version {1:f}", a.GetName(), a.version)
        Next
    End Sub

    ' Output:
    '   Author information for FirstClass
    '     P. Ackerman, version 1.00
    ' Author information for SecondClass
    ' Author information for ThirdClass
    '  R. Koch, version 2.00
    '  P. Ackerman, version 1.00

End Class

Lihat juga