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.
Dengan menggunakan atribut Informasi Pemanggil, Anda dapat memperoleh informasi tentang pemanggil suatu metode. Anda dapat memperoleh jalur file kode sumber, nomor baris dalam kode sumber, dan nama anggota pemanggil. Informasi ini berguna untuk melacak, men-debug, 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 Penelepon yang ditentukan di System.Runtime.CompilerServices namespace:
Karakteristik | Deskripsi | Tipe |
---|---|---|
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 | Metode atau nama properti pemanggil. Lihat Nama Anggota nanti dalam topik ini. | String |
CallerArgumentExpressionAttribute | Ekspresi yang digunakan oleh pemanggil untuk argumen. Lihat Ekspresi Penelepon nanti dalam topik ini. | String |
Contoh
Contoh berikut menunjukkan cara menggunakan atribut Info Penelepon. Pada setiap panggilan ke TraceMessage
metode , 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
Komentar
Anda harus menentukan nilai default eksplisit untuk setiap parameter opsional. Anda tidak dapat menerapkan atribut Info Penelepon ke parameter yang tidak ditentukan sebagai opsional.
Atribut Caller Info tidak menjadikan parameter opsional. Sebaliknya, nilai tersebut menentukan nilai default yang digunakan saat argumen dihilangkan.
Nilai Info Penelepon dipancarkan sebagai harfiah ke dalam Bahasa Perantara (IL) pada waktu kompilasi. Tidak seperti hasil properti StackTrace untuk pengecualian, hasil tersebut tidak terpengaruh oleh pengacakan.
Anda dapat secara eksplisit menyediakan argumen opsional untuk mengontrol informasi penelepon atau menyembunyikan informasi penelepon.
Nama Anggota
Anda dapat menggunakan atribut CallerMemberName
untuk menghindari penentuan nama anggota sebagai argumen String
ke metode yang dipanggil. Dengan menggunakan teknik ini, Anda menghindari masalah bahwa Pemfaktoran Ulang Nama tidak mengubah String
nilai. Manfaat ini sangat berguna untuk tugas-tugas berikut:
Menggunakan prosedur pelacakan dan diagnostik.
Menerapkan INotifyPropertyChanged antarmuka saat mengikat data. Antarmuka ini memungkinkan properti objek untuk memberi tahu kontrol terikat bahwa properti telah berubah, sehingga kontrol dapat menampilkan informasi yang diperbarui.
CallerMemberName
Tanpa atribut , Anda harus menentukan nama properti sebagai harfiah.
Bagan berikut menunjukkan nama anggota yang dikembalikan saat Anda menggunakan CallerMemberName
atribut .
Panggilan berlangsung dalam | Hasil nama anggota |
---|---|
Metode, properti, atau peristiwa | Nama metode, properti, atau peristiwa tempat panggilan berasal. |
Pembangun | String ".ctor" |
Konstruktor statis | String ".cctor" |
Destruktor | String "Finalisasi" |
Operator atau konversi yang ditentukan pengguna | Nama yang dihasilkan untuk anggota, misalnya, "op_Addition". |
Konstruktor atribut | Nama anggota tempat atribut diterapkan. Jika atribut adalah elemen apa pun dalam anggota (seperti parameter, nilai pengembalian, atau parameter jenis generik), hasil ini adalah nama anggota yang terkait dengan elemen tersebut. |
Tidak berisi anggota (misalnya, tingkat majelis atau atribut yang diterapkan pada tipe) | Nilai default dari parameter opsional. |
Ekspresi pemanggilan
Anda menggunakan System.Runtime.CompilerServices.CallerArgumentExpressionAttribute saat Anda ingin mengambil ekspresi yang digunakan untuk argumen. Pustaka diagnostik dapat memilih untuk menyajikan rincian lebih lanjut mengenai ekspresi yang diberikan sebagai argumen. Dengan memberikan ekspresi yang memicu diagnostik, selain nama parameter, pengembang memiliki detail lebih lanjut tentang kondisi yang memicu diagnostik. Informasi tambahan itu membuatnya lebih mudah diperbaiki. 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