Bagikan melalui


Informasi pemanggil

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 dalam namespace System.Runtime.CompilerServices :

Karakteristik Deskripsi Tipe
CallerFilePath Jalur lengkap file sumber yang berisi pemanggil. Ini adalah jalur file pada waktu kompilasi. String
CallerLineNumber Nomor baris dalam file sumber tempat metode dipanggil. Integer
CallerMemberName Metode atau nama properti pemanggil. Lihat bagian Nama Anggota nanti dalam topik ini. String

Contoh

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan atribut ini untuk melacak penelepon.

open System.Diagnostics
open System.Runtime.CompilerServices
open System.Runtime.InteropServices

type Tracer() =
    member _.DoTrace(message: string,
                      [<CallerMemberName; Optional; DefaultParameterValue("")>] memberName: string,
                      [<CallerFilePath; Optional; DefaultParameterValue("")>] path: string,
                      [<CallerLineNumber; Optional; DefaultParameterValue(0)>] line: int) =
        Trace.WriteLine(sprintf $"Message: {message}")
        Trace.WriteLine(sprintf $"Member name: {memberName}")
        Trace.WriteLine(sprintf $"Source file path: {path}")
        Trace.WriteLine(sprintf $"Source line number: {line}")

Komentar

Atribut Info Penelepon hanya dapat diterapkan ke parameter opsional. Atribut Info Penelepon menyebabkan pengkompilasi menulis nilai yang tepat untuk setiap parameter opsional yang dihiasi dengan atribut Info Penelepon.

Nilai Info Penelepon dipancarkan sebagai harfiah ke dalam Bahasa Perantara (IL) pada waktu kompilasi. Tidak seperti hasil properti StackTrace untuk pengecualian, hasilnya tidak terpengaruh oleh obfuscation.

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 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. CallerMemberName Tanpa atribut , Anda harus menentukan nama properti sebagai harfiah.

Bagan berikut menunjukkan nama anggota yang dikembalikan saat Anda menggunakan atribut CallerMemberName.

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.

Lihat juga