0Pricing
C# Academy · درس

Type وMethodInfo والتنشيط والسمات المخصصة

احصل على كائنات Type، وحدد MethodInfo، واستدعِ الأساليب، وأنشئ المثيلات باستخدام Activator، وعرّف السمات المخصصة واقرأها.

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

نظرة عامة

الهدف: استخدم الانعكاس بأمان.

  • احصل على Type
  • اعثر على MethodInfo
  • أنشئ باستخدام Activator
  • عرّف السمات واقرأها

الحصول على Type

احصل على Type باستخدام typeof، أو من مثيل عبر GetType()، أو بالاسم عبر Type.GetType.

using System;

public class Sample { }

public class Program
{
  public static void Main(string[] args)
  {
    // 1) From a compile-time type
    Type t1 = typeof(Sample);

    // 2) From an instance
    Sample s = new Sample();
    Type t2 = s.GetType();

    // 3) From a full name (needs assembly-qualified name for external types)
    Type t3 = Type.GetType("System.String");

    Console.WriteLine(t1.Name + ", " + t2.FullName + ", " + (t3 == null ? "null" : t3.Name));
  }
}

MethodInfo.Invoke

استخدم GetMethod لتحديد موقع أسلوب، وInvoke لاستدعائه. مرّر المثيل ومصفوفة الوسائط.

using System;
using System.Reflection;

public class Greeter
{
  public string Hello(string name) { return "Hello, " + name; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Greeter g = new Greeter();
    Type t = typeof(Greeter);

    MethodInfo mi = t.GetMethod("Hello"); // public instance method
    object result = mi.Invoke(g, new object[] { "Ada" }); // call dynamically

    Console.WriteLine(result); // Hello, Ada
  }
}

أساسيات Activator

Activator.CreateInstance(Type) ينشئ كائنًا باستخدام المُنشئ العام بلا معاملات.

using System;

public class Person
{
  public string Name { get; set; }
  public Person() { Name = "Unknown"; } // parameterless ctor
}

public class Program
{
  public static void Main(string[] args)
  {
    Type tp = typeof(Person);
    object o = Activator.CreateInstance(tp); // uses public parameterless ctor
    Person p = (Person)o;
    p.Name = "Alan";
    Console.WriteLine("Created: " + p.Name);
  }
}

السمات المخصصة

أنشئ فئة Attribute صغيرة واسترجعها باستخدام GetCustomAttributes من النوع أو الطريقة.

using System;
using System.Reflection;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class LabelAttribute : Attribute
{
  public string Text { get; private set; }
  public LabelAttribute(string text) { Text = text; }
}

[Label("Utility class")]
public class Utils
{
  [Label("Adds two ints")]
  public static int Add(int a, int b) { return a + b; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Type t = typeof(Utils);

    // Read class attribute
    object[] classAttrs = t.GetCustomAttributes(typeof(LabelAttribute), false);
    if (classAttrs.Length > 0)
      Console.WriteLine("Class label: " + ((LabelAttribute)classAttrs[0]).Text);

    // Read method attribute
    MethodInfo mi = t.GetMethod("Add");
    object[] methodAttrs = mi.GetCustomAttributes(typeof(LabelAttribute), false);
    if (methodAttrs.Length > 0)
      Console.WriteLine("Method label: " + ((LabelAttribute)methodAttrs[0]).Text);
  }
}

نصائح واحتياطات

نصائح:

  • تحقق من القيمة null التي تعيدها Type.GetType ومن الأعضاء المفقودين.
  • فضّل استخدام typeof متى أمكن، فهو أسرع وأكثر أمانًا.
  • اجعل استخدام الانعكاس مركزيًا وموثقًا جيدًا.
  • استخدم BindingFlags للبحث عن الأعضاء غير العامة أو الثابتة.

أساسيات التنشيط

تحقق سريع: ما واجهة API التي تنشئ مثيلًا من Type يملك مُنشئًا عامًا بلا معاملات؟

مراجعة

مراجعة: احصل على Type، وابحث عن MethodInfo، وأنشئ الكائن باستخدام Activator، واقرأ السمات باستخدام GetCustomAttributes.

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

هل درس «Type وMethodInfo والتنشيط والسمات المخصصة» مجاني؟

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

ماذا ستتعلم في «Type وMethodInfo والتنشيط والسمات المخصصة»؟

احصل على كائنات Type، وحدد MethodInfo، واستدعِ الأساليب، وأنشئ المثيلات باستخدام Activator، وعرّف السمات المخصصة واقرأها. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «Type وMethodInfo والتنشيط والسمات المخصصة»؟

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

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

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

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

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