Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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