الفرق بين var و dynamic و object في C#

x32x01
  • بواسطة x32x01 ||
لو بتتعلم C# أو شغال فيها من فترة، أكيد صادفت الأنواع التلاتة دول:
var, dynamic, و object

وغالبًا سألت نفسك: “أيه الفرق بينهم؟ وأمتى أستخدم كل واحد؟”
تعالى نفهمها ببساطة وبأمثلة واضحة 👇

أولًا: var - الأسرع والأدق في الأداء ⚡

الـ var بيتحدد نوعه وقت الـ Compilation، يعني وقت ما الكود بيتعمله Build.
المُصرّف (Compiler) بيشوف القيمة اللي حطيتها ويقولك النوع المناسب.

مثال 👇
C#:
var number = 10; 
number = "Ahmed"; // ❌ Error: can't change type
هنا المتغير number اتحدد نوعه كـ int، ومينفعش تغيره بعد كده لأي نوع تاني.
كمان مش هتقدر تكتب var x; من غير ما تديه قيمة لأن الـ Compiler لازم يعرف النوع من البداية.

✅ النتيجة: أداء ممتاز وسرعة في التنفيذ لأن النوع معروف مسبقًا.



ثانيًا: dynamic - الحرية المطلقة بس بحذر 😅

الـ dynamic نوعه بيتحدد وقت التشغيل (Runtime) مش وقت الـ Compilation، وده بيديك حرية كاملة تغير النوع في أي وقت.

مثال 👇
C#:
dynamic value = 10;
value = "Ahmed";
value = true;
هنا النوع بيتغير بحرية، لكن الخطأ مش هيظهر إلا وقت التشغيل، وده ممكن يسبب مشاكل في البرامج الكبيرة.

✅ المميزات: مرونة عالية جدًا.
⚠️ العيوب: أبطأ شوية لأن التحقق من الأخطاء بيتم وقت التشغيل مش وقت الكتابة.



ثالثًا: object - الجد الكبير لكل الأنواع 🧓

الـ object هو الأب لكل أنواع البيانات في C#.
تقدر تخزن فيه أي حاجة، بس علشان تستخدم القيمة بعد كده لازم تعمل Casting.

مثال 👇
C#:
object value = 10;
int number = (int)value; // ✅ لازم Casting

لو نسيت تعمل Casting:
C#:
int number = value; // ❌ Error

أما مع dynamic مش محتاج تعمل Casting خالص 👇
C#:
dynamic value = 10;
int number = value; // ✅ شغال تمام



من الأفضل في الأداء؟ 🏎️

  • var ✅ الأفضل والأسرع لأن النوع معروف وقت الترجمة.
  • object 🔹 أبطأ شوية من var لكنه أسرع من dynamic.
  • dynamic ⚠️ الأبطأ بسبب الـ Runtime Overhead.

إمتى تستخدم dynamic؟ 🤔

مش معناها إنها وحشة، بالعكس!
dynamic ممتازة جدًا لما تتعامل مع مكتبات أو APIs بترجع بيانات غير معروفة النوع، زي JSON مثلًا 👇
C#:
dynamic json = JsonConvert.DeserializeObject("{\"name\": \"Ahmed\", \"age\": 25}");
string name = json.name;
int age = json.age;
في المثال ده dynamic بتسهل التعامل مع البيانات اللي جاية من مصدر خارجي بدون ما تعمل Model معين.

الخلاصة 🎯

النوعوقت تحديد النوعالأداءالمرونةملاحظات
varوقت الـ Compilationممتازمحدودةالأفضل للأداء
dynamicوقت الـ Runtimeأبطأعاليةمناسب للـ APIs
objectوقت الـ Runtimeمتوسطمحدودةيحتاج Casting

💡 نصيحة أخيرة:
لو بتدور على أداء وسرعة استخدم var.
لو بتتعامل مع بيانات متغيرة استخدم dynamic.
ولو محتاج تخزن أي نوع بشكل عام استخدم object.
 
التعديل الأخير:
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
416
x32x01
x32x01
x32x01
الردود
0
المشاهدات
773
x32x01
x32x01
x32x01
الردود
0
المشاهدات
657
x32x01
x32x01
x32x01
الردود
0
المشاهدات
535
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,830
المشاركات
2,027
أعضاء أكتب كود
466
أخر عضو
chaouki
عودة
أعلى