Bagikan melalui


Informasi Penelepon (Visual Basic)

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

Lihat juga