- 0
سجل دخول لمتابعه هذا
متابعين
0

مقدمة في ال Generics
بواسطة
bashmohandes,
-
يستعرض القسم حالياً 0 members
لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .
بواسطة
bashmohandes,
لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .
تم النشر منذ (معدل)
هذا درس بسيط في ال Generics باستخدام ال VB.net الاصدار 2005
مبدئيا محترفي ال ++C يفهمون الConcept الخاص بالGenerics لانه مقتبس بالكامل من ال Templates في ال ++C.
ثانيا لشرح المفهوم بطريقة سريعة تابع الكود التالي على سبيل المثال
في الكود السابق ستجد ان ال myList استخدمت و كأنها Array of Integers و لكن المشكلة الاساسية ان الCompiler لن يرفض جملة مثل هذه
و هذا لان الArrayList تقبل اي متغير من اي نوع و تقوم بعمل Boxing له في نوع Object.
و لهذا فعند استعادة القيم من ال ArrayList فاننا نقوم بعمل Type Conversion
و لكن مشكلة اخرى ان الCompiler لن يعترض على هذه الجملة
بفرض وجود Class من اختراعنا اسمها BusinessObject
بفرض ان القيمة الاولى في الList كانت اساسا من نوع Integer و ليس من نوع BusinessObject و لكن الCompiler لن يعترض و لكن سيحدث InvalidCastException في اثناء الRuntime و قد تقضي ساعات في محاولة اصلاح الخطأ
كل هذه المشكلات نشأت من ان الArrayList تقبل اي نوع و هكذا فقدنا ميزة الType Safe.
تابع معي هذا الكود
ستجد في الكود السابق اننا استخدمنا الGenerics في انشاء List من نوع معين اي انها لن تقبل اي متغيرات او قيم من اي نوع اخر اي اننا اذا كتبنا هذا السطر
سيعترض الCompiler بشدة على هذه الجملة بسبب ان MyNewList لا تقبل Strings
أيضا يمكنك استخدام القيم من الList مباشرة على انها Integer بدون الحاجة لعمل Cast
كما ان استخدام الGenerics غير مقصور على الabstract types مثل ال integer و الstring و الfloat و .... الخ بل انه يمتد الى اي نوع اخر من الtypes اي اننا يمكننا ان نبني List من نوع BusinessObject
ارجو ان يكون المفهوم الاساسي قد وصل الى الاذهان
المرحلة التالية هي بناء اول Generic خاصة بنا
تابع الكود التالي
اعتقد ان الكود يشرح نفسه و لكن سأحاول تفسيره
عند استخدام هذا الكود هكذا
بعد تنفيذ هذا السطر سيتم انشاء object من نوع MyGeneric و ستصبح قيمة T هي Integer و بالتالي سيصبح المتغير الداخلي X من نوع Integer
أيضا يمكنك ان تجعل الGeneric تأخذ اكثر من Type مثل
ارجو ان تعم الفائدة على الجميع.
الدرس القادم Generic Methods
تم تعديل بواسطه bashmohandesشارك هذا الرد
رابط المشاركة
شارك الرد من خلال المواقع ادناه