C# - Var vs Dynamic

 في C#، هناك فرق جوهري بين var و dynamic و object من حيث طريقة التعامل مع الأنواع و وقت تحديد النوع و الاستخدامات. إليك الفروق بالتفصيل:


1. var

  • تحديد النوع: يتم تحديد نوع المتغير أثناء وقت الترجمة (Compile Time).
  • يجب تهيئته عند التعريف: لا يمكنك استخدام var بدون تعيين قيمة مباشرة.
  • يتم التحقق من الأخطاء أثناء الترجمة: إذا حاولت إسناد قيمة من نوع غير متوافق، فسيتم اكتشاف الخطأ أثناء وقت الترجمة.
  • مثال:
    var number = 10;    // نوعه int تلقائيًا
    var text = "Hello"; // نوعه string تلقائيًا
    
    // var x; // ❌ خطأ: يجب التهيئة عند التعريف
    

2. dynamic

  • تحديد النوع: يتم تحديد نوع المتغير أثناء وقت التشغيل (Runtime).

  • مرونة كبيرة: يمكن إسناد أي نوع من البيانات له وتغيير النوع أثناء التنفيذ.

  • لا يوجد تحقق أثناء الترجمة: أي خطأ في استخدامه لن يظهر إلا أثناء التنفيذ.

  • يُستخدم في التعامل مع: JSON، COM objects، Reflection، التعامل مع اللغات الديناميكية مثل JavaScript.

  • مثال:

    dynamic value = 10;  // في هذه اللحظة هو int
    value = "Hello";     // الآن أصبح string
    value = new List<int>(); // يمكن أن يصبح أي شيء
    
    dynamic x = "Hello";
    Console.WriteLine(x.Length); // ✅ لا خطأ أثناء الترجمة، ولكن إذا لم يكن لـ x خاصية Length، سيحدث خطأ أثناء التشغيل
    

3. object

  • تحديد النوع: يتم التعامل معه كـ object أثناء وقت الترجمة، ولكن يمكن أن يحتوي على أي نوع من البيانات.

  • يحتاج إلى تحويل صريح عند التعامل مع البيانات المخزنة فيه.

  • مثال:

    object obj = 10; // يتم تحويل int إلى object (Boxing)
    int num = (int)obj; // يحتاج إلى تحويل صريح عند الاسترجاع (Unboxing)
    
    object obj = "Hello";
    Console.WriteLine(obj.Length); // ❌ خطأ أثناء الترجمة، يجب تحويله إلى string أولًا
    

    للحل:

    object obj = "Hello";
    string str = (string)obj; // تحويل صريح
    Console.WriteLine(str.Length); // ✅ يعمل بشكل صحيح
    

الفرق الرئيسي


متى تستخدم كل نوع؟

  • استخدم var إذا كنت تعرف النوع وتريد تحسين الأداء.
  • استخدم dynamic عند التعامل مع بيانات غير معروفة مسبقًا، مثل JSON أو COM أو Reflection.
  • استخدم object إذا كنت بحاجة إلى تخزين أنواع مختلفة دون تحديدها بدقة، ولكنك تحتاج إلى التحويل الصريح عند الاستخدام.

الخلاصة

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

اذا كنت تحتاج للأداء والثبات، استخدم var أو object مع تحويل صريح. أما إذا كنت بحاجة إلى مرونة في التعامل مع البيانات، فاستخدم dynamic بحذر.

تعليقات

المشاركات الشائعة من هذه المدونة

HTML - Text Formatting تنسيقات النص

HTML - ملخص شامل لأهم التاجات

HTML - Youtube videos تضمين فيديوهات اليوتيوب