الفرق بين 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
المشاهدات
669
x32x01
x32x01
x32x01
الردود
0
المشاهدات
711
x32x01
x32x01
x32x01
الردود
0
المشاهدات
882
x32x01
x32x01
x32x01
الردود
0
المشاهدات
964
x32x01
x32x01
x32x01
الردود
0
المشاهدات
166
x32x01
x32x01
الوسوم : الوسوم
c sharp compilation dynamic json object runtime type casting var أداء البرمجيات إدارة الأنواع
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
2,320
المشاركات
2,533
أعضاء أكتب كود
567
أخر عضو
Mohaned
عودة
أعلى