Akademi C# · Pelajaran

Maklumat peringkat sumber (atribut Caller)

Gunakan CallerMemberName, CallerFilePath dan CallerLineNumber untuk menangkap maklumat tapak panggilan bagi log, pengawal dan pemberitahuan sifat.

Pelajaran 2 daripada 38 langkah

Maklumat peringkat sumber (atribut Caller) ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 2 daripada 3. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 3 pelajaran.

Mengapa maklumat pemanggil

Matlamat: Tangkap maklumat lokasi panggilan secara automatik.

  • CallerMemberName — siapa yang memanggil
  • CallerFilePath — fail yang mana
  • CallerLineNumber — baris yang mana
  • Sesuai untuk catatan, pengawal dan pemberitahuan

Nama ahli untuk catatan

CallerMemberName mengisi nama kaedah atau sifat pemanggil secara automatik apabila argumen tidak diberikan.

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
  }
}

Maklumat fail + baris

Tambahkan CallerFilePath dan CallerLineNumber untuk diagnostik yang 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();
  }
}

Pemberitahuan sifat

Gunakan CallerMemberName dalam penetap atau pembantu acara untuk mengelakkan rentetan yang dikodkan secara keras.

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"
  }
}

Pengawal dengan nama pemanggil

Maklumat pemanggil menjadikan mesej pengawal lebih jelas tanpa rentetan 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);
    }
  }
}

Petua & nota

Nota:

  • Atribut pemanggil berfungsi pada parameter pilihan yang mempunyai nilai lalai.
  • Jangan bergantung pada laluan fail yang tepat untuk rahsia; laluan boleh mendedahkan folder.
  • Sesuai untuk pengelogan, diagnostik dan peristiwa perubahan sifat.

Atribut nama pemanggil

Semakan pantas: Atribut manakah yang membolehkan kaedah mendapatkan nama pemanggilnya sebagai nilai parameter lalai?

Ringkasan

Ringkasan: Tambahkan CallerMemberName, CallerFilePath dan CallerLineNumber pada parameter pilihan untuk menangkap konteks pemanggil secara automatik.

Percuma untuk bermula

Pelajari C# dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
93
Pelajaran
346

Soalan Lazim

Adakah pelajaran “Maklumat peringkat sumber (atribut Caller)” percuma?

Ya — teks penuh “Maklumat peringkat sumber (atribut Caller)” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 3 pelajaran.

Apakah yang akan saya pelajari dalam “Maklumat peringkat sumber (atribut Caller)”?

Gunakan CallerMemberName, CallerFilePath dan CallerLineNumber untuk menangkap maklumat tapak panggilan bagi log, pengawal dan pemberitahuan sifat. Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 3.

Berapa lamakah pelajaran “Maklumat peringkat sumber (atribut Caller)” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?

Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Type, MethodInfo, pengaktifan, atribut tersuai
  2. Maklumat peringkat sumber (atribut Caller)
  3. Senario metapengaturcaraan ringan
← Kembali ke Akademi C#