SlideShare a Scribd company logo
1 of 14
Introduction to .NET Framework 
3- Reflection
Outlines 
مقدمة إلى الإنعكاس.  
ماهو الانعكاس ؟  
ما هو التحميل الديناميكي ؟  
التحقق من احتواء صف ما على منهج معين .  
تحديد فيما إذا كان صف ما مشتق من آخر  
05 2 تشرين الثاني، 14
مقدمة إلى الانعكاس 
يرتبط موضوع الانعكاس بالمجمعات والصفات بشكل مباشر.  
عملية استكشاف المجمعة للحصول على محتوياتها بشكل كامل  
عملية تشريح التطبيقات )التعرف على كامل محتوياتها في زمن التنفيذ(.  
يدور موضوع هذا الدرس حول البيانات الوصفية أو معرف البيانات  
وطرق استرجاعه . “metadata” 
05 3 تشرين الثاني، 14
ماهو الانعكاس ؟ 
عملية استكشاف داخلية لتطبيق ما دون الولوج إلى شيفرته .  
ما بالإضافة إلى جميع )Assembly( إيجاد جميع الصفوف في تجُّمع  
داخل صف ما إنطلاق ا Events وال Properties وال methods ال 
interfaces من الصف الأساس الذي اشتقُّ منه هذا الصنف وانتها ء بال 
التي يحققها . 
إنشاء أغراض واستدعاء مناهجها أثناء زمن التنفيذ.  
فمثلاً : يمكنك استخدام الانعكاس للتحقق من وجود صفوف معينة في  
فهرسك )مجلدك(الرئيسي وأنْ وجدت , تقوم بتحميلها واستخدامها 
ضمن التطبيق الخاص بك . 
05 4 تشرين الثاني، 14
ماهو الانعكاس ؟ 
التي DLL يُعتبر الانعكاس بمثابة مفهوم مكتبات الربط الديناميكي  
وجِدَت خصيصا لمعرفة محتوياتها أثناء زمن التنفيذ. 
عن تابع DLL لم نكن نستطيع البحث ضمن ملف COM سابقا في  
معين وإذا استطعنا ذلك فلن نستطيع معرفة ما هي البارمترات 
يمكن ذلك باستخدام الانعكاس .NET المقدمة للتابع , لكن مع 
بالإضافة إلى البيانات الوصفية . 
05 5 تشرين الثاني، 14
لماذا نحتاج إلى الانعكاس؟ 
الانعكاس ضروري في أي لغة تفسيرية.  
يجب أن يعرف ما يقوم بتحميله CLR  
namespace Attributes_Reflection 
{ 
class Program 
{ 
static void Main(string[] args) 
{ 
Console.WriteLine("Hello World"); 
} 
} 
} 
05 6 تشرين الثاني، 14
ما هو التحميل الديناميكي ؟ 
أبسط مثال هو تحميل مجمعة أثناء زمن التنفيذ.  
using System.Reflection; 
من المكتبة Assembly يمكن تحميل أي مجمعة وذلك بواسطة الصف  
كمايلي : LoadFrom وباستخدام التابع الستاتيكي Reflection 
Assembly a = Assembly.LoadFrom(@"D:atom.dll"); 
الآن يمكن استخراج كافة الأنماط ضمن المجمعة التي قمنا بتحميلها وذلك  
حيث يعيد ها المنهج مصفوفة كائنات من GetTypes يتم بواسطة التابع 
التي تتضمن معلومات عن الأنواع المختلفة المُعرفة ضمن Type الصف 
هذه المجمعة 
Type[] types=a.GetTypes();//Get an All Types in the 
Assembly 
05 7 تشرين الثاني، 14
ما هو التحميل الديناميكي ؟ 
عن ماذا يمثل؟ Type الآن نقوم بسؤال الكائن  
) class, enum ,interface ,ValueType ( 
Property 
Description 
Class يكون هذا النوع هو true إذا كانت هذه الخاصية isClass 
Enum يكون هذا النوع هو true إذا كانت هذه الخاصية isEnum 
Interface يكون هذا النوع هو true إذا كانت هذه الخاصية isInterface 
ValueType يكون هذا النوع هو true إذا كانت هذه الخاصية isValueType 
05 8 تشرين الثاني، 14
ما هو التحميل الديناميكي ؟ 
. IsNotPublic و IsPublic : هما (Access Modifier) خاصيتين لتحيد نطاق الولوج  
Assembly a = Assembly.GetExecutingAssembly(); //Get the 
Current Assembly 
Type[] types = a.GetTypes(); // Get an All Types in the 
Current Assembly 
foreach(Type t in types) 
{ 
if (t.IsPublic) 
Console.WriteLine("Class {0} is Public", t.FullName); 
} 
05 9 تشرين الثاني، 14
ما هو التحميل الديناميكي ؟ 
. Type المناهج الخاصة بالصنف  
Description method اسم المنهج 
)Assembly استرجاع كافة الأنواع لتجمع مُعطى )خاص بالصف GetTypes 
صف ما مُعطى )method( استرجاع كافة مناهج GetMethods 
استرجاع كافة بواني صف ما مُعطى GetConstructors 
استرجاع كافة خصائص صف ما مُعطى GetProperties 
استرجاع كافة أحداث صف ما مُعطى GetEvents 
استرجاع كافة الواجهات التي يحققها صف ما مُعطى. GetInterfaes 
05 10 تشرين الثاني، 14
التحقق من احتواء صف ما على منهج معين . 
static void Main(string[] args) 
{ 
string methodName="DoItAll"; // 
// if you Want to search in A Specific Assembly you must be Call 
// Assembly.LoadFrom(path of Assembly) 
Assembly a = Assembly.GetExecutingAssembly(); 
foreach (Type type in a.GetTypes()) 
{ 
// Is this a Class ? 
if (type.IsClass == false) 
continue;// No, Skip it 
//Get All Methods in Class 
foreach (MethodInfo m in type.GetMethods()) 
{ 
if (m.Name== methodName) 
Console.WriteLine("Class {0} Contains method {1}" 
,type.FullName, m.Name); 
} 
} 
} 
05 11 تشرين الثاني، 14
التحقق من احتواء صف ما على منهج معين . 
05 12 تشرين الثاني، 14
تحديد فيما إذا كان صف ما مشتق من آخر 
class A:B 
{ 
} 
class B:C 
{ 
} 
class C 
{ 
} 
C 
B 
A 
05 13 تشرين الثاني، 14
تحديد فيما إذا كان صف ما مشتق من آخر 
static void Main(string[] args) 
{ 
string classname = "C"; 
Assembly a = Assembly.GetExecutingAssembly();// if you Want 
//to search in A Specific Assembly you must be Call 
//Assembly.LoadFrom(path of Assembly) 
foreach (Type type in a.GetTypes()) 
{ 
// Is this a Class ? 
if (type.IsClass == false) 
continue; // No, Skip it 
// 
Type Basetype = type.BaseType; 
while (Basetype != null) 
{ 
if (Basetype.FullName.EndsWith(classname)) 
Console.WriteLine("Class {0} is derived 
from{1}",type.FullName, classname); 
Basetype = Basetype.BaseType; 
} 
} 
} 
05 14 تشرين الثاني، 14

More Related Content

Viewers also liked

Login System with Windows/Microsoft Live using OAuth php and mysql
Login System with Windows/Microsoft Live using OAuth php and mysqlLogin System with Windows/Microsoft Live using OAuth php and mysql
Login System with Windows/Microsoft Live using OAuth php and mysqlthesoftwareguy7
 
10 system.security.cryptography
10 system.security.cryptography10 system.security.cryptography
10 system.security.cryptographyMohammad Alyan
 

Viewers also liked (6)

Login System with Windows/Microsoft Live using OAuth php and mysql
Login System with Windows/Microsoft Live using OAuth php and mysqlLogin System with Windows/Microsoft Live using OAuth php and mysql
Login System with Windows/Microsoft Live using OAuth php and mysql
 
5 fifth lesson -xml
5 fifth lesson -xml5 fifth lesson -xml
5 fifth lesson -xml
 
Introduction To ERP
Introduction To ERPIntroduction To ERP
Introduction To ERP
 
10 system.security.cryptography
10 system.security.cryptography10 system.security.cryptography
10 system.security.cryptography
 
Coursera
CourseraCoursera
Coursera
 
Models for hierarchical data
Models for hierarchical dataModels for hierarchical data
Models for hierarchical data
 

More from Mohammad Alyan

More from Mohammad Alyan (11)

Blue ocean strategy arabic
Blue ocean strategy arabicBlue ocean strategy arabic
Blue ocean strategy arabic
 
Apple case study
Apple case studyApple case study
Apple case study
 
Introduction to Industry Life Cycles
 Introduction to Industry Life Cycles  Introduction to Industry Life Cycles
Introduction to Industry Life Cycles
 
Crowd funding
Crowd fundingCrowd funding
Crowd funding
 
Coursera
CourseraCoursera
Coursera
 
Course index
Course indexCourse index
Course index
 
التفكير- مصنع للإبداع
التفكير- مصنع للإبداعالتفكير- مصنع للإبداع
التفكير- مصنع للإبداع
 
Cloud computing
Cloud computing Cloud computing
Cloud computing
 
Linq introduction
Linq introductionLinq introduction
Linq introduction
 
10 1 otp all
10 1 otp all10 1 otp all
10 1 otp all
 
6 ado.net
6 ado.net6 ado.net
6 ado.net
 

3 third lesson-reflection

  • 1. Introduction to .NET Framework 3- Reflection
  • 2. Outlines مقدمة إلى الإنعكاس.  ماهو الانعكاس ؟  ما هو التحميل الديناميكي ؟  التحقق من احتواء صف ما على منهج معين .  تحديد فيما إذا كان صف ما مشتق من آخر  05 2 تشرين الثاني، 14
  • 3. مقدمة إلى الانعكاس يرتبط موضوع الانعكاس بالمجمعات والصفات بشكل مباشر.  عملية استكشاف المجمعة للحصول على محتوياتها بشكل كامل  عملية تشريح التطبيقات )التعرف على كامل محتوياتها في زمن التنفيذ(.  يدور موضوع هذا الدرس حول البيانات الوصفية أو معرف البيانات  وطرق استرجاعه . “metadata” 05 3 تشرين الثاني، 14
  • 4. ماهو الانعكاس ؟ عملية استكشاف داخلية لتطبيق ما دون الولوج إلى شيفرته .  ما بالإضافة إلى جميع )Assembly( إيجاد جميع الصفوف في تجُّمع  داخل صف ما إنطلاق ا Events وال Properties وال methods ال interfaces من الصف الأساس الذي اشتقُّ منه هذا الصنف وانتها ء بال التي يحققها . إنشاء أغراض واستدعاء مناهجها أثناء زمن التنفيذ.  فمثلاً : يمكنك استخدام الانعكاس للتحقق من وجود صفوف معينة في  فهرسك )مجلدك(الرئيسي وأنْ وجدت , تقوم بتحميلها واستخدامها ضمن التطبيق الخاص بك . 05 4 تشرين الثاني، 14
  • 5. ماهو الانعكاس ؟ التي DLL يُعتبر الانعكاس بمثابة مفهوم مكتبات الربط الديناميكي  وجِدَت خصيصا لمعرفة محتوياتها أثناء زمن التنفيذ. عن تابع DLL لم نكن نستطيع البحث ضمن ملف COM سابقا في  معين وإذا استطعنا ذلك فلن نستطيع معرفة ما هي البارمترات يمكن ذلك باستخدام الانعكاس .NET المقدمة للتابع , لكن مع بالإضافة إلى البيانات الوصفية . 05 5 تشرين الثاني، 14
  • 6. لماذا نحتاج إلى الانعكاس؟ الانعكاس ضروري في أي لغة تفسيرية.  يجب أن يعرف ما يقوم بتحميله CLR  namespace Attributes_Reflection { class Program { static void Main(string[] args) { Console.WriteLine("Hello World"); } } } 05 6 تشرين الثاني، 14
  • 7. ما هو التحميل الديناميكي ؟ أبسط مثال هو تحميل مجمعة أثناء زمن التنفيذ.  using System.Reflection; من المكتبة Assembly يمكن تحميل أي مجمعة وذلك بواسطة الصف  كمايلي : LoadFrom وباستخدام التابع الستاتيكي Reflection Assembly a = Assembly.LoadFrom(@"D:atom.dll"); الآن يمكن استخراج كافة الأنماط ضمن المجمعة التي قمنا بتحميلها وذلك  حيث يعيد ها المنهج مصفوفة كائنات من GetTypes يتم بواسطة التابع التي تتضمن معلومات عن الأنواع المختلفة المُعرفة ضمن Type الصف هذه المجمعة Type[] types=a.GetTypes();//Get an All Types in the Assembly 05 7 تشرين الثاني، 14
  • 8. ما هو التحميل الديناميكي ؟ عن ماذا يمثل؟ Type الآن نقوم بسؤال الكائن  ) class, enum ,interface ,ValueType ( Property Description Class يكون هذا النوع هو true إذا كانت هذه الخاصية isClass Enum يكون هذا النوع هو true إذا كانت هذه الخاصية isEnum Interface يكون هذا النوع هو true إذا كانت هذه الخاصية isInterface ValueType يكون هذا النوع هو true إذا كانت هذه الخاصية isValueType 05 8 تشرين الثاني، 14
  • 9. ما هو التحميل الديناميكي ؟ . IsNotPublic و IsPublic : هما (Access Modifier) خاصيتين لتحيد نطاق الولوج  Assembly a = Assembly.GetExecutingAssembly(); //Get the Current Assembly Type[] types = a.GetTypes(); // Get an All Types in the Current Assembly foreach(Type t in types) { if (t.IsPublic) Console.WriteLine("Class {0} is Public", t.FullName); } 05 9 تشرين الثاني، 14
  • 10. ما هو التحميل الديناميكي ؟ . Type المناهج الخاصة بالصنف  Description method اسم المنهج )Assembly استرجاع كافة الأنواع لتجمع مُعطى )خاص بالصف GetTypes صف ما مُعطى )method( استرجاع كافة مناهج GetMethods استرجاع كافة بواني صف ما مُعطى GetConstructors استرجاع كافة خصائص صف ما مُعطى GetProperties استرجاع كافة أحداث صف ما مُعطى GetEvents استرجاع كافة الواجهات التي يحققها صف ما مُعطى. GetInterfaes 05 10 تشرين الثاني، 14
  • 11. التحقق من احتواء صف ما على منهج معين . static void Main(string[] args) { string methodName="DoItAll"; // // if you Want to search in A Specific Assembly you must be Call // Assembly.LoadFrom(path of Assembly) Assembly a = Assembly.GetExecutingAssembly(); foreach (Type type in a.GetTypes()) { // Is this a Class ? if (type.IsClass == false) continue;// No, Skip it //Get All Methods in Class foreach (MethodInfo m in type.GetMethods()) { if (m.Name== methodName) Console.WriteLine("Class {0} Contains method {1}" ,type.FullName, m.Name); } } } 05 11 تشرين الثاني، 14
  • 12. التحقق من احتواء صف ما على منهج معين . 05 12 تشرين الثاني، 14
  • 13. تحديد فيما إذا كان صف ما مشتق من آخر class A:B { } class B:C { } class C { } C B A 05 13 تشرين الثاني، 14
  • 14. تحديد فيما إذا كان صف ما مشتق من آخر static void Main(string[] args) { string classname = "C"; Assembly a = Assembly.GetExecutingAssembly();// if you Want //to search in A Specific Assembly you must be Call //Assembly.LoadFrom(path of Assembly) foreach (Type type in a.GetTypes()) { // Is this a Class ? if (type.IsClass == false) continue; // No, Skip it // Type Basetype = type.BaseType; while (Basetype != null) { if (Basetype.FullName.EndsWith(classname)) Console.WriteLine("Class {0} is derived from{1}",type.FullName, classname); Basetype = Basetype.BaseType; } } } 05 14 تشرين الثاني، 14