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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk