Informasi Pemanggil (Visual Basic)
Dengan menggunakan atribut Info Pemanggil, Anda dapat memperoleh informasi tentang pemanggil ke suatu metode. Anda dapat memperoleh jalur file dari kode sumber, nomor baris dalam kode sumber, dan nama anggota pemanggil. Informasi ini berguna untuk melacak, melakukan penelusuran kesalahan, dan membuat alat diagnostik.
Untuk mendapatkan informasi ini, Anda menggunakan atribut yang diterapkan ke parameter opsional, yang masing-masing memiliki nilai default. Tabel berikut mencantumkan atribut Info Pemanggil yang ditentukan di namespace layanan System.Runtime.CompilerServices:
Atribut | Deskripsi | Jenis |
---|---|---|
CallerFilePathAttribute | Jalur lengkap file sumber yang berisi pemanggil. Ini adalah jalur file pada waktu kompilasi. | String |
CallerLineNumberAttribute | Nomor baris dalam file sumber tempat metode dipanggil. | Integer |
CallerMemberNameAttribute | Nama properti atau metode pemanggil. Lihat Nama Anggota nanti dalam topik ini. | String |
CallerArgumentExpressionAttribute | Ekspresi yang digunakan oleh pemanggil untuk argumen. Lihat Ekspresi Pemanggil nanti dalam topik ini. | String |
Contoh
Contoh berikut menunjukkan cara menggunakan atribut Info Pemanggil. Pada setiap panggilan ke metode TraceMessage
, informasi pemanggil diganti sebagai argumen ke parameter opsional.
Private Sub DoProcessing()
TraceMessage("Something happened.")
End Sub
Public Sub TraceMessage(message As String,
<System.Runtime.CompilerServices.CallerMemberName> Optional memberName As String = Nothing,
<System.Runtime.CompilerServices.CallerFilePath> Optional sourcefilePath As String = Nothing,
<System.Runtime.CompilerServices.CallerLineNumber()> Optional sourceLineNumber As Integer = 0)
System.Diagnostics.Trace.WriteLine("message: " & message)
System.Diagnostics.Trace.WriteLine("member name: " & memberName)
System.Diagnostics.Trace.WriteLine("source file path: " & sourcefilePath)
System.Diagnostics.Trace.WriteLine("source line number: " & sourceLineNumber)
End Sub
' Sample output:
' message: Something happened.
' member name: DoProcessing
' source file path: C:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoVB\CallerInfoVB\Form1.vb
' source line number: 15
Keterangan
Anda harus menentukan nilai default eksplisit untuk setiap parameter opsional. Anda tidak dapat menerapkan atribut info pemanggil ke parameter yang tidak ditentukan sebagai opsional.
Atribut Info Pemanggil tidak membuat parameter opsional. Sebaliknya, atribut tersebut memengaruhi nilai default yang diteruskan saat argumen dihilangkan.
Nilai Info Pemanggil dipancarkan sebagai harfiah ke Bahasa Perantara (IL) pada waktu kompilasi. Berbeda dengan hasil properti StackTrace untuk pengecualian, hasilnya tidak terpengaruh oleh kebingungan.
Anda dapat secara eksplisit memberikan argumen opsional untuk mengontrol informasi pemanggil atau untuk menyembunyikan informasi pemanggil.
Nama Anggota
Anda dapat menggunakan atribut CallerMemberName
untuk menghindari penentuan nama anggota sebagai argumen String
untuk metode yang dipanggil. Dengan menggunakan teknik ini, Anda menghindari masalah bahwa Mengganti Nama Refaktoring tidak akan mengubah nilai String
. Keuntungan ini sangat berguna untuk tugas-tugas berikut:
Menggunakan rutinitas pelacakan dan diagnostik.
Menerapkan antarmuka INotifyPropertyChanged saat mengikat data. Antarmuka ini memungkinkan properti objek untuk memberi tahu kontrol terikat bahwa properti telah berubah, sehingga kontrol dapat menampilkan informasi yang diperbarui. Tanpa atribut
CallerMemberName
, Anda harus menentukan nama properti sebagai harfiah.
Bagan berikut menunjukkan nama anggota yang dikembalikan saat Anda menggunakan atribut CallerMemberName
.
Panggilan terjadi di dalam | Hasil nama anggota |
---|---|
Metode, properti, atau peristiwa | Nama metode, properti, atau peristiwa asal panggilan. |
Konstruktor | String ".ctor" |
Konstruktor statis | String ".cctor" |
Destruktor | String "Finalize" |
Operator atau konversi yang ditentukan pengguna | Nama yang dibuat untuk anggota, misalnya, "op_Addition". |
Konstruktor atribut | Nama anggota yang atributnya diterapkan. Jika atributnya adalah elemen apa pun di dalam anggota (seperti parameter, nilai pengembalian, atau parameter berjenis generik), hasil ini adalah nama anggota yang terkait dengan elemen itu. |
Tida berisi anggota (misalnya, tingkat rakitan atau atribut yang diterapkan ke jenis) | Nilai default parameter opsional. |
Ekspresi pemanggil
Anda menggunakan System.Runtime.CompilerServices.CallerArgumentExpressionAttribute saat Anda ingin mengambil ekspresi yang digunakan untuk argumen. Pustaka diagnostik mungkin ingin memberikan detail selengkapnya tentang ekspresi yang diteruskan sebagai argumen. Dengan memberikan ekspresi yang memicu diagnostik, selain nama parameter, pengembang memiliki detail lebih lanjut tentang kondisi yang memicu diagnostik. Informasi tambahan tersebut memudahkan untuk perbaikan. Metode berikut menggunakan CallerArgumentExpressionAttribute untuk menampilkan kondisi yang harus True
:
Public Shared Sub ValidateArgument(ByVal parameterName As String,
ByVal condition As Boolean,
<CallerArgumentExpression("condition")> ByVal Optional message As String? = Nothing)
If Not condition Then
Throw New ArgumentException($"Argument failed validation: <{message}>", parameterName)
End If
End Sub