تقييم الموضوع :
  • 2 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
مقال: Reflection وكيفية استخدامها في برامجنا
#1
[ملحوظة: هذا الموضوع يناقش أغراض تعليمية فقط, ولا يمت بصلة بموضوع الهندسة العكسية.]


Reflection من التقنيات الهامة للدوت نت, وعن طريقها يستطيع أي برنامج جمع معلومات التعريف MetaData الخاصة به والتعامل معها, وتعتبر آلية قوية وفعالة للتعامل مع الكائنات وقت التشغيل, أدوات ال Reflection توجد ضمن مساحة الإسم System.Reflection, تتيح الفئات والواجهات الموجودة ضمن مساحة الاسم System.Reflection المبرمجين من مراقبة وجمع المعلومات حول نوع Type معيّن, وكذلك الوصول إلى الخصائص والدوال والإجراءات الخاصة بذلك النوع باستخدام الإجراء Invoke, يمكن من خلالها أيضا كتابة تطبيقات و برامج الهندسة العكسية, مستعرضات للفئات Class Viewers, أو محررات الخصائص Property Editors, سنناقش في هذا الموضوع الاستخدامات التالية لآلية Reflection, وهي:

  • بعض المفاهيم الأساسية
  • كيفية جمع بيانات التعريف MetaData حول تجميع Assembly معيّن , واستكشاف الأنواع التي يحتويها ذلك التجميع
  • الاستدعاء الديناميكي للإجراءات والخصائص وقت التشغيل RunTime
    باستخدام الربط المتأخر Late binding يمكن إنشاء مثيل كائن Object Instance من نوع معيّن واستدعاء الإجراءات والخصائص الخاصة به, بعد الكشف عنها.
  • إنشاء التجميعات والأنواع أثناء وقت التشغيل باستخدام مساحة الاسم System.Reflection.Emit
    وهذه هي الميزة الأكثر أهمية وفائدة في تقنية Reflection, حيث تساعد على إنشاء الأنواع والتجميعات أثناء وقت التشغيل من أجل إنجاز مهام معيّنة حسب الحاجة إليها, وحفظها على مساحات التخزين, واستخدامها كذلك أثناء وقت التشغيل, وتعتبر هذه الميزة مدخلاً لما يعرف بالذكاء الصناعي, ومع ذلك فإن لهذه التقنية مساوئ سنناقشها في بقية الموضوع.

بعض المفاهيم الأساسية:

System.Type: هذه الفئة أساسية ويمكن ان تمثل عدة أنواع, إما: الفئات, الواجهات المصفوفات, أوالتراقيم (هذه هي الأنواع التي تهمنا).

.NET Managed Module (وحدة نمطية مُدارة): هو إما ملف تنفيذي محمول Portable Executable أو ملف نوع Type DLL, قد تحتوي على فئة واحدة أو واجهة واحدة أو اكثر, يمكن ان تحتوي هذه الوحدة النمطية على اكثر من مساحة اسم NameSpace واحدة, ويمكن أن تشمل مساحة اسم واحدة على أكثر من وحدة نمطية.

واحدة او أكثر من الوحدات النمطية تشكل مجتمعة مايعرف بالـتجميع Assembly, لا يجب الخاط بين Module أو (وحدة التعليمات البرمجية) الخاصة بـ Visual Basic وبين الوحدة النمطية.

يمكن الحصول على وحدة نمطية بعد ترجمة التعليمات البرمجية باستخدام Visual Studio أو باستخدام اداة مترجم اللغة vbc.exe (Visual Basic compiler) او الأداة csc.exe ( CSharp compiler) والموجودة ضمن ادوات سطر الأوامر Visual Studio Command Line tools.

يمكن ربط أكثر من وحدة نمطية واحدة لتشكيل تجميع واحد باستخدام الأداة Al.exe (Assembly Linker), والمخطط التالي يوضح ذلك:

تتشكل كل وحدة نمطية أساساً من الأجزاء التالية:

  • PE Header: مثل اي ملف Win32 PE غير مدار, تحتوي الوحدات المدارة على PE header, يحتوي PE header على معلومات حول نوع الوحدة (مدارة او غير مدارة) + معلومات حول تاريخ بناء الوحدة + نوع CPU المستهدف (x86 او x64)
  • CLR Header: يحتوي على معلومات إصدار Framework المستهدف, ومعلومات حول دالة التنفيذ الرئيسية في الوحدة.
  • Metadata: هي ببساطة الواجهة الرئيسية التي تقوم بتعريف ووصف الأنواع وتقديم معلومات عنها عند إضافة الوحدة التي تحتويها كمرجع reference إلى تجميع آخر. تتلخص المعلومات التي تقدمها في: الإسم والإصدار والمفتاح العمومي Public Key, الأنواع المستخدمة, التجميعات المرتبطة, أذونات الأمان Security Permissions المطلوبة أثناء التشغيل, السمات Attributes.
  • تعليمات لغة Microsoft الوسيطة MSIL : عند تحويل الكود إلى ملف تنفيذي باستخدام Visual Studio او vbc.exe فإنه سيتم تحويل تلك الأكواد إلى لغة MSIL, والتي تعتمد على تنفيذ تعليماتها على شكل رصة Stack, تعتبر هذه اللغة مشتركة بين جميع لغات البرمجة التي تعتمد عليها الوت نت.

Application Domain (مجال التطبيق): هو البيئة التي يعمل عليها التطبيق حيث توفر تلك البيئة عزلاً لما يقوم به التطبيق عن باقي التطبيقات, تمكِّن الفئة AppDomain الوصول إلى مجال التطبيق الحالي, وتطبيق جملة من العمليات عليه.
الرد }}}
تم الشكر بواسطة: ابو ابراهيم , ابو ليلى


الردود في هذا الموضوع
مقال: Reflection وكيفية استخدامها في برامجنا - بواسطة Islam Ibrahim - 17-09-12, 12:54 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  شاهد حداءة ( مقال الوحي يضحد كل قول وإن قال العظام العالمون ) مسوق اونلاين 0 572 23-08-22, 10:33 PM
آخر رد: مسوق اونلاين
  الفرق بين الحلم والكابوس وكيفية التفرقة بينهم حسام هيكل 0 1,072 17-04-20, 12:35 AM
آخر رد: حسام هيكل
  [مقال منقول] مشروع Mono : شغل الدوت نت على اللينكس أو أي نظام تشغيل تحلم به الشاكي لله 6 5,880 13-03-14, 02:02 AM
آخر رد: الشاكي لله
  مقال- كيف نحل مشاكلنا بأنفسنا- RaggiTech 0 2,376 27-10-12, 04:23 PM
آخر رد: RaggiTech
  مقال تقني- Windows Vista وVisual Studio RaggiTech 0 2,501 09-10-12, 11:46 AM
آخر رد: RaggiTech
  مقال: DotNET Components Licencing RaggiTech 0 2,031 09-10-12, 11:44 AM
آخر رد: RaggiTech
  مقال- التخزين المعزول Isolated Storage RaggiTech 1 2,266 09-10-12, 11:42 AM
آخر رد: RaggiTech
  مقال- التوثيق في الدوت نت Documenting In .NET RaggiTech 4 3,553 09-10-12, 11:40 AM
آخر رد: RaggiTech
  مقال: كيف نحل مشاكلنا بأنفسنا- RaggiTech 0 2,287 09-10-12, 11:25 AM
آخر رد: RaggiTech
  مقال- ما لا تعرفونه عن Web browser Control RaggiTech 1 2,256 09-10-12, 11:23 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: