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 بحذر.
تعليقات
إرسال تعليق