0Pricing
C# Academy · درس

النوع dynamic

أجّلوا تحديد النوع إلى وقت التشغيل باستخدام dynamic

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

ما هو dynamic؟

يتجاوز النوع dynamic التحقق من النوع أثناء الترجمة. وبدلًا من ذلك، يُحسم الوصول إلى الأعضاء والعمليات أثناء التشغيل.

using System;

class Program {
    static void Main() {
        dynamic value = 10;
        Console.WriteLine(value + 5);
    }
}

إعادة الإسناد بأنواع مختلفة

يمكن لمتغير dynamic احتواء أي نوع، بل ويمكنه تغيير نوعه بين عمليات الإسناد.

using System;

class Program {
    static void Main() {
        dynamic x = 1;
        Console.WriteLine(x);
        x = "now a string";
        Console.WriteLine(x);
    }
}

الربط أثناء التشغيل

مع dynamic، يثق المترجم بك. وتحدث عمليات البحث عن الأساليب والخصائص عند تنفيذ السطر، لا عند ترجمته.

using System;

class Program {
    static void Main() {
        dynamic text = "hello";
        Console.WriteLine(text.ToUpper());
    }
}

تظهر الأخطاء أثناء التشغيل

بما أن التحقق مؤجل، يؤدي العضو غير الصحيح إلى طرح RuntimeBinderException أثناء التشغيل بدلًا من فشل الترجمة.

using System;
using Microsoft.CSharp.RuntimeBinder;

class Program {
    static void Main() {
        dynamic n = 5;
        try {
            n.NoSuchMethod();
        } catch (RuntimeBinderException) {
            Console.WriteLine("No such member");
        }
    }
}

‏dynamic مقابل var

يثبت var أثناء الترجمة، بينما يظل dynamic مرنًا أثناء التشغيل. قد يبدوان متشابهين، لكن سلوكهما مختلف جدًا.

using System;

class Program {
    static void Main() {
        var fixedType = 10;
        dynamic flexible = 10;
        flexible = "changed";
        Console.WriteLine(fixedType + " " + flexible);
    }
}

الحساب باستخدام dynamic

تُحسم العوامل المستخدمة مع dynamic أثناء التشغيل، استنادًا إلى القيم الفعلية المعنية.

using System;

class Program {
    static void Main() {
        dynamic a = 3;
        dynamic b = 4;
        Console.WriteLine(a * b);
    }
}

القيم المعادة من نوع dynamic

يمكن لأسلوب أن يعيد dynamic عندما يختلف النوع فعلًا، لكن المتصلين يفقدون مساعدة المترجم أثناء الترجمة.

using System;

class Program {
    static dynamic GetValue(bool flag) {
        return flag ? (dynamic)42 : "text";
    }
    static void Main() {
        Console.WriteLine(GetValue(true));
        Console.WriteLine(GetValue(false));
    }
}

حالات استخدام dynamic

يساعد dynamic في التشغيل التداخلي مع COM، والبيانات الشبيهة بـ JSON، واستدعاء التعليمات البرمجية التي لا يُعرف شكلها إلا أثناء التشغيل.

using System;

class Program {
    static void Main() {
        dynamic data = 100;
        data += 1;
        Console.WriteLine(data);
    }
}

تكلفة الأداء

ينطوي الربط أثناء التشغيل على تكلفة إضافية. وفي الحلقات المكثفة أو التعليمات البرمجية البسيطة، يُفضّل استخدام الأنواع الثابتة لتحقيق السرعة والأمان.

using System;

class Program {
    static void Main() {
        int fast = 0;
        for (int i = 0; i < 5; i++) fast += i;
        Console.WriteLine(fast);
    }
}

لا يتوفر IntelliSense

لا يمكن للمحررات اقتراح الأعضاء في dynamic، لأن النوع لا يُعرف إلا أثناء التشغيل. وهذا يبطئ عملية التطوير.

using System;

class Program {
    static void Main() {
        dynamic s = "Code";
        Console.WriteLine(s.Length);
    }
}

استخدمه باعتدال

لا تلجأ إلى dynamic إلا عندما يتعذر على تحديد الأنواع الثابتة التعبير عن السيناريو فعلًا؛ وإلا فاستخدم الأنواع المحددة.

using System;

class Program {
    static void Main() {
        dynamic flexible = 7;
        Console.WriteLine(flexible.GetType().Name);
    }
}

تحقق سريع

اختبر مدى فهمك لـ dynamic.

مراجعة

يعطّل dynamic التحقق من النوع أثناء الترجمة، ويحل الأعضاء أثناء التشغيل، لذلك يمكن لمتغير dynamic تغيير نوعه، وتؤدي الاستدعاءات غير الصالحة إلى طرح RuntimeBinderException.

وبخلاف var (الثابت أثناء الترجمة)، يتميز dynamic بالمرونة، لكنه يكلّف أداءً إضافيًا، ويفقدك IntelliSense، وينبغي استخدامه باعتدال.

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

هل درس «النوع dynamic» مجاني؟

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

ماذا ستتعلم في «النوع dynamic»؟

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

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

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

كم من الوقت يستغرق درس «النوع dynamic»؟

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

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

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

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

  1. استنتاج نوع المتغير المحلي باستخدام var
  2. متى تتجنبون var
  3. النوع dynamic
  4. تعبيرات new ذات النوع المستهدف
← العودة إلى C# Academy