
- بواسطة x32x01 ||
لو بتتعلم C# أو شغال فيها من فترة، أكيد صادفت الأنواع التلاتة دول:
var, dynamic, و object
وغالبًا سألت نفسك: “أيه الفرق بينهم؟ وأمتى أستخدم كل واحد؟”
تعالى نفهمها ببساطة وبأمثلة واضحة
أولًا: var - الأسرع والأدق في الأداء
الـ var بيتحدد نوعه وقت الـ Compilation، يعني وقت ما الكود بيتعمله Build.
المُصرّف (Compiler) بيشوف القيمة اللي حطيتها ويقولك النوع المناسب.
مثال
هنا المتغير number اتحدد نوعه كـ int، ومينفعش تغيره بعد كده لأي نوع تاني.
كمان مش هتقدر تكتب var x; من غير ما تديه قيمة لأن الـ Compiler لازم يعرف النوع من البداية.
النتيجة: أداء ممتاز وسرعة في التنفيذ لأن النوع معروف مسبقًا.
ثانيًا: dynamic - الحرية المطلقة بس بحذر
الـ dynamic نوعه بيتحدد وقت التشغيل (Runtime) مش وقت الـ Compilation، وده بيديك حرية كاملة تغير النوع في أي وقت.
مثال
هنا النوع بيتغير بحرية، لكن الخطأ مش هيظهر إلا وقت التشغيل، وده ممكن يسبب مشاكل في البرامج الكبيرة.
المميزات: مرونة عالية جدًا.
العيوب: أبطأ شوية لأن التحقق من الأخطاء بيتم وقت التشغيل مش وقت الكتابة.
ثالثًا: object - الجد الكبير لكل الأنواع
الـ object هو الأب لكل أنواع البيانات في C#.
تقدر تخزن فيه أي حاجة، بس علشان تستخدم القيمة بعد كده لازم تعمل Casting.
مثال
لو نسيت تعمل Casting:
أما مع dynamic مش محتاج تعمل Casting خالص
من الأفضل في الأداء؟
إمتى تستخدم dynamic؟
مش معناها إنها وحشة، بالعكس!
dynamic ممتازة جدًا لما تتعامل مع مكتبات أو APIs بترجع بيانات غير معروفة النوع، زي JSON مثلًا
في المثال ده dynamic بتسهل التعامل مع البيانات اللي جاية من مصدر خارجي بدون ما تعمل Model معين.
الخلاصة
نصيحة أخيرة:
لو بتدور على أداء وسرعة استخدم var.
لو بتتعامل مع بيانات متغيرة استخدم dynamic.
ولو محتاج تخزن أي نوع بشكل عام استخدم object.
var, dynamic, و object
وغالبًا سألت نفسك: “أيه الفرق بينهم؟ وأمتى أستخدم كل واحد؟”
تعالى نفهمها ببساطة وبأمثلة واضحة

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

C#:
var number = 10;
number = "Ahmed"; // ❌ Error: can't change type
كمان مش هتقدر تكتب 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;
الخلاصة
النوع | وقت تحديد النوع | الأداء | المرونة | ملاحظات |
---|---|---|---|---|
var | وقت الـ Compilation | ممتاز | محدودة | الأفضل للأداء |
dynamic | وقت الـ Runtime | أبطأ | عالية | مناسب للـ APIs |
object | وقت الـ Runtime | متوسط | محدودة | يحتاج Casting |

لو بتدور على أداء وسرعة استخدم var.
لو بتتعامل مع بيانات متغيرة استخدم dynamic.
ولو محتاج تخزن أي نوع بشكل عام استخدم object.
التعديل الأخير: