Bagikan melalui


Mengakses Atribut dengan Menggunakan Pantulan (Visual Basic)

Fakta bahwa Anda dapat menentukan atribut kustom dan menempatkannya dalam kode sumber tidak akan memberikan banyak nilai jika tidak ada cara untuk mengambil informasi tersebut dan menindaklanjutinya. Dengan menggunakan pantulan, Anda dapat mengambil informasi yang ditentukan dengan atribut kustom. Method kuncinya adalah GetCustomAttributes, yang mengembalikan array objek yang setara dengan run-time atribut kode sumber. Method 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 hingga SampleClass dikuerikan untuk atribut. Memanggil GetCustomAttributes di SampleClass menyebabkan objek Author dikonstruksi dan diinisialisasi seperti di atas. Jika kelas memiliki atribut lain, objek atribut lain juga dikonstruksi secara serupa. GetCustomAttributes lalu mengembalikan objek Author dan objek atribut lainnya dalam array. Anda kemudian dapat melakukan iterasi pada array ini, menentukan atribut yang diterapkan berdasarkan jenis setiap elemen array, dan mengekstrak informasi dari objek atribut.

Contoh

Berikut adalah contoh lengkapnya. Atribut kustom ditentukan, 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