0Pricing
C# Academy · درس

معلومات مستوى المصدر (سمات Caller)

استخدم CallerMemberName وCallerFilePath وCallerLineNumber لالتقاط معلومات موضع الاستدعاء للسجلات والحواجز وإشعارات الخصائص.

معلومات مستوى المصدر (سمات Caller) درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.

لماذا معلومات المستدعي

الهدف: التقاط معلومات موضع الاستدعاء تلقائيًا.

  • CallerMemberName — مَن أجرى الاستدعاء
  • CallerFilePath — الملف الذي صدر منه الاستدعاء
  • CallerLineNumber — رقم السطر
  • مفيد جدًا للسجلات وعمليات التحقق والإشعارات

اسم العضو في السجلات

تملأ CallerMemberName تلقائيًا اسم طريقة المستدعي أو خاصيته عند حذف الوسيطة.

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

معلومات الملف والسطر

أضف CallerFilePath وCallerLineNumber للحصول على تشخيص دقيق.

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();
  }
}

إشعارات الخصائص

استخدم CallerMemberName في دوال التعيين أو مساعدات الأحداث لتجنب السلاسل النصية المضمّنة مباشرة.

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

عمليات التحقق باستخدام اسم المستدعي

تجعل معلومات المستدعي رسائل التحقق أوضح من دون كتابة سلاسل نصية يدويًا.

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

نصائح وملاحظات

ملاحظات:

  • تعمل سمات المستدعي مع المعاملات الاختيارية التي تملك قيمًا افتراضية.
  • لا تعتمد على مسارات الملفات الدقيقة عند التعامل مع الأسرار؛ فقد تكشف المسارات عن المجلدات.
  • تُعد مفيدة جدًا في التسجيل والتشخيص وأحداث تغيير الخصائص.

سمة اسم المستدعي

تحقق سريع: ما السمة التي تتيح للطريقة الحصول على اسم المستدعي كقيمة افتراضية لمعامل؟

مراجعة

مراجعة: أضف CallerMemberName وCallerFilePath وCallerLineNumber إلى المعاملات الاختيارية لالتقاط سياق المستدعي دون تكلفة إضافية.

الأسئلة الشائعة

هل درس «معلومات مستوى المصدر (سمات Caller)» مجاني؟

نعم — نص درس «معلومات مستوى المصدر (سمات Caller)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 3 دروس في المجموع.

ماذا ستتعلم في «معلومات مستوى المصدر (سمات Caller)»؟

استخدم CallerMemberName وCallerFilePath وCallerLineNumber لالتقاط معلومات موضع الاستدعاء للسجلات والحواجز وإشعارات الخصائص. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.

كم من الوقت يستغرق درس «معلومات مستوى المصدر (سمات Caller)»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Type وMethodInfo والتنشيط والسمات المخصصة
  2. معلومات مستوى المصدر (سمات Caller)
  3. سيناريوهات البرمجة الوصفية الخفيفة
← العودة إلى C# Academy