0Pricing
C# Academy · Pelajaran

Informasi tingkat sumber (atribut Caller)

Gunakan CallerMemberName, CallerFilePath, dan CallerLineNumber untuk menangkap informasi lokasi pemanggilan bagi log, pemeriksaan penjaga, dan notifikasi properti.

Informasi tingkat sumber (atribut Caller) adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 3 pelajaran total.

Mengapa informasi pemanggil

Tujuan: Tangkap informasi lokasi pemanggilan secara otomatis.

  • CallerMemberName — siapa yang memanggil
  • CallerFilePath — berkas mana
  • CallerLineNumber — baris mana
  • Sangat berguna untuk pencatatan, guard, dan notifikasi

Nama anggota untuk log

CallerMemberName secara otomatis mengisi nama metode atau properti pemanggil ketika argumen dihilangkan.

using System;
using System.Runtime.CompilerServices;

public static class Log
{
  // Caller fills "member" automatically if not provided
  public static void Info(string msg, [CallerMemberName] string member = null)
  {
    Console.WriteLine("[" + (member ?? "?") + "] " + msg);
  }
}

public class Program
{
  static void DoWork() { Log.Info("started"); }

  public static void Main(string[] args)
  {
    Log.Info("app boot");
    DoWork(); // prints caller method name
  }
}

Info berkas dan baris

Tambahkan CallerFilePath dan CallerLineNumber untuk diagnostik yang sangat tepat.

using System;
using System.Runtime.CompilerServices;

public static class Diag
{
  public static void Trace(string msg,
    [CallerFilePath] string file = null,
    [CallerLineNumber] int line = 0,
    [CallerMemberName] string member = null)
  {
    Console.WriteLine(file + ":" + line + " in " + member + " -> " + msg);
  }
}

public class Program
{
  static void Step() { Diag.Trace("stepping"); }

  public static void Main(string[] args)
  {
    Diag.Trace("start");
    Step();
  }
}

Notifikasi properti

Gunakan CallerMemberName dalam metode penyetel atau pembantu peristiwa agar tidak perlu menggunakan string yang ditulis secara langsung.

using System;
using System.Runtime.CompilerServices;

public class Person
{
  private string _name;

  // Notify helper uses CallerMemberName so callers need not pass the property name
  void Notify([CallerMemberName] string property = null)
  {
    Console.WriteLine("Changed: " + property);
  }

  public string Name
  {
    get { return _name; }
    set { _name = value; Notify(); } // property name auto-filled
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Person p = new Person();
    p.Name = "Ada"; // prints "Changed: Name"
  }
}

Pemeriksaan dengan nama pemanggil

Informasi pemanggil membuat pesan pemeriksaan lebih jelas tanpa string yang ditulis secara manual.

using System;
using System.Runtime.CompilerServices;

public static class Guard
{
  public static void NotNull(object x, [CallerMemberName] string caller = null)
  {
    if (x == null) throw new ArgumentNullException("value", "Null passed by " + (caller ?? "?"));
  }
}

public class Program
{
  static void Save(string path)
  {
    Guard.NotNull(path); // if null, message includes "Save"
    Console.WriteLine("Saving to " + path);
  }

  public static void Main(string[] args)
  {
    try
    {
      Save(null);
    }
    catch (Exception ex)
    {
      Console.WriteLine(ex.Message);
    }
  }
}

Kiat dan catatan

Catatan:

  • Atribut pemanggil berfungsi pada parameter opsional dengan nilai bawaan.
  • Jangan mengandalkan jalur berkas yang persis untuk rahasia; jalur dapat mengungkap folder.
  • Sangat berguna untuk pencatatan, diagnostik, dan peristiwa perubahan properti.

Atribut nama pemanggil

Pemeriksaan singkat: Atribut mana yang memungkinkan metode mendapatkan nama pemanggilnya sebagai nilai parameter bawaan?

Ringkasan

Ringkasan: Tambahkan CallerMemberName, CallerFilePath, dan CallerLineNumber ke parameter opsional untuk menangkap konteks pemanggil secara otomatis.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Informasi tingkat sumber (atribut Caller)” gratis?

Ya — teks lengkap “Informasi tingkat sumber (atribut Caller)” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Informasi tingkat sumber (atribut Caller)”?

Gunakan CallerMemberName, CallerFilePath, dan CallerLineNumber untuk menangkap informasi lokasi pemanggilan bagi log, pemeriksaan penjaga, dan notifikasi properti. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 3.

Berapa lama pelajaran “Informasi tingkat sumber (atribut Caller)” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Type, MethodInfo, aktivasi, atribut khusus
  2. Informasi tingkat sumber (atribut Caller)
  3. Skenario metaprogramming ringan
← Kembali ke C# Academy