x32x01
أدارة أكتب كود
- بواسطة x32x01 ||
كـ Performance استخدام var أفضل من استخدام dynamic
وده بسبب إن عندنا مع var النوع بيتحدد وقت الـ Compilation وقت ما الكود بيتعمله Build
الـ Compiler بيشوف القيمة اللي إنت حاططها في المتغير وبيقول ده مثلاً int أو string أو غيره فبالتالي النوع بيبقى ثابت
وده سبب إن لو حاولت تغير النوع بعد ما عرفته بيديك Compilation Error ومش بيسمح بده
وكمان مش بيسمح إنك تعمل Declaration فقط زي كده var x وتسكت لإنه بيكون محتاج يعرف النوع بناءً على القيمة
️
مش مسموح تغيير النوع
الكود ده بيوضح إن النوع ثابت ولا يمكن تغييره بعد التعريف
أما بقى الـ dynamic معناها إن النوع بيتحدد وقت الـ Runtime لما البرنامج يشتغل
معناه إنك تقدر تغير النوع لأي حاجة بس المشكلة إن الـ Compiler مش هيعملك أي Check وقت الكتابة فلو فيه خطأ هيبان بس وقت التشغيل وده من ضمن عيوبها للأسف
️
الكود ده بيوضح إن النوع متغير وبيتحدد أثناء التشغيل
فيه تشابه كبير بينه وبين dynamic من ناحية إنك تقدر تخزن فيه أي نوع بيانات
بس الفرق إن مع Object لما تيجي تستخدم القيمة المخزنة لازم تعمل Casting للنوع اللي عايز تستخدمه
هيديك هنا Error يقولك
You cannot implicitly convert object to int
فلازم نعمل Explicit Casting
وده الكود ده بيوضح إن مع Object لازم تعمل Casting علشان تستخدم القيمة
وكه الكود ده بيوضح إن مع dynamic مش محتاج تعمل Casting
من ناحية الأداء Object أفضل من dynamic لأن مع Object النوع بيتم تحديده وقت الـ Runtime زي dynamic لكن بدون الـ Overhead الإضافي الخاص بالـ dynamic
لكن Object أقل مرونة لأنك محتاج تعمل Casting كل مرة تستخدم فيها القيمة المخزنة
الخلاصة var أفضل من حيث الأداء dynamic أكثر مرونة لكنه أبطأ شوية و Object مناسب للاستخدام لو محتاج تخزن أي نوع بيانات بس مع بعض القيود
ده مش معناه إن dynamic وحشة وملهاش استخدامات بالعكس dynamic مفيدة جداً في مواقف معينة زي لما تشتغل مع مكتبات أو APIs بتتعامل مع أنواع بيانات متغيرة أو مش معروفة أثناء كتابة الكود
لما تشتغل مع مكتبات بتتعامل مع JSON أو البيانات اللي جاية من مصادر خارجية
الكود ده بيوضح إزاي dynamic بتسهل التعامل مع البيانات اللي النوع بتاعها مش ثابت أو مش معروف وقت كتابة الكود
أكيد في طريقة أفضل إنك تعمل Model أصلا وتستقبل فيه الداتا اللي راجعه لكن ده مثال توضيحي إي مميز في dynamic عن object
بس كده أتمني يكون البوست فادك .. ومتنساش زر الشير فى أعلى البوست .. شارك مع غيرك
وده بسبب إن عندنا مع var النوع بيتحدد وقت الـ Compilation وقت ما الكود بيتعمله Build
الـ Compiler بيشوف القيمة اللي إنت حاططها في المتغير وبيقول ده مثلاً int أو string أو غيره فبالتالي النوع بيبقى ثابت
وده سبب إن لو حاولت تغير النوع بعد ما عرفته بيديك Compilation Error ومش بيسمح بده
وكمان مش بيسمح إنك تعمل Declaration فقط زي كده var x وتسكت لإنه بيكون محتاج يعرف النوع بناءً على القيمة
️
var number = 10;
number = "Ahmed";
مش مسموح تغيير النوع
الكود ده بيوضح إن النوع ثابت ولا يمكن تغييره بعد التعريف
أما بقى الـ dynamic معناها إن النوع بيتحدد وقت الـ Runtime لما البرنامج يشتغل
معناه إنك تقدر تغير النوع لأي حاجة بس المشكلة إن الـ Compiler مش هيعملك أي Check وقت الكتابة فلو فيه خطأ هيبان بس وقت التشغيل وده من ضمن عيوبها للأسف
️ dynamic value = 10;
✅️ value = "Ahmed";
️
value = true;
الكود ده بيوضح إن النوع متغير وبيتحدد أثناء التشغيل
نيجي بقى للـ Object
الـ Object هو النوع الأساسي اللي كل الأنواع في C# بتتوارث منهفيه تشابه كبير بينه وبين dynamic من ناحية إنك تقدر تخزن فيه أي نوع بيانات
بس الفرق إن مع Object لما تيجي تستخدم القيمة المخزنة لازم تعمل Casting للنوع اللي عايز تستخدمه
️ object value = 10;
int number = value;
هيديك هنا Error يقولك
You cannot implicitly convert object to int
فلازم نعمل Explicit Casting
️ int number = (int)value;
وده الكود ده بيوضح إن مع Object لازم تعمل Casting علشان تستخدم القيمة
أما مع dynamic مش محتاج تعمل Casting
Code:
dynamic value = 10;
int number = value;
من ناحية الأداء Object أفضل من dynamic لأن مع Object النوع بيتم تحديده وقت الـ Runtime زي dynamic لكن بدون الـ Overhead الإضافي الخاص بالـ dynamic
لكن Object أقل مرونة لأنك محتاج تعمل Casting كل مرة تستخدم فيها القيمة المخزنة
الخلاصة var أفضل من حيث الأداء dynamic أكثر مرونة لكنه أبطأ شوية و Object مناسب للاستخدام لو محتاج تخزن أي نوع بيانات بس مع بعض القيود
ده مش معناه إن dynamic وحشة وملهاش استخدامات بالعكس dynamic مفيدة جداً في مواقف معينة زي لما تشتغل مع مكتبات أو APIs بتتعامل مع أنواع بيانات متغيرة أو مش معروفة أثناء كتابة الكود
لما تشتغل مع مكتبات بتتعامل مع JSON أو البيانات اللي جاية من مصادر خارجية
Code:
dynamic json = JsonConvert.DeserializeObject
("{\"name\": \"Ahmed\", \"age\": 25}");
string name = json.name;
int age = json.age;
أكيد في طريقة أفضل إنك تعمل Model أصلا وتستقبل فيه الداتا اللي راجعه لكن ده مثال توضيحي إي مميز في dynamic عن object
بس كده أتمني يكون البوست فادك .. ومتنساش زر الشير فى أعلى البوست .. شارك مع غيرك