- بواسطة x32x01 ||
لو بتتعلم C# أو شغال فيها من فترة، أكيد صادفت الأنواع التلاتة دول:
var, dynamic, و object
وغالبًا سألت نفسك: “أيه الفرق بينهم؟ وأمتى أستخدم كل واحد؟”
تعالى نفهمها ببساطة وبأمثلة واضحة 👇
المُصرّف (Compiler) بيشوف القيمة اللي حطيتها ويقولك النوع المناسب.
مثال 👇
هنا المتغير number اتحدد نوعه كـ int، ومينفعش تغيره بعد كده لأي نوع تاني.
كمان مش هتقدر تكتب var x; من غير ما تديه قيمة لأن الـ Compiler لازم يعرف النوع من البداية.
✅ النتيجة: أداء ممتاز وسرعة في التنفيذ لأن النوع معروف مسبقًا.
مثال 👇
هنا النوع بيتغير بحرية، لكن الخطأ مش هيظهر إلا وقت التشغيل، وده ممكن يسبب مشاكل في البرامج الكبيرة.
✅ المميزات: مرونة عالية جدًا.
⚠️ العيوب: أبطأ شوية لأن التحقق من الأخطاء بيتم وقت التشغيل مش وقت الكتابة.
تقدر تخزن فيه أي حاجة، بس علشان تستخدم القيمة بعد كده لازم تعمل Casting.
مثال 👇
لو نسيت تعمل Casting:
أما مع dynamic مش محتاج تعمل Casting خالص 👇
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.
التعديل الأخير: