17-09-12, 12:55 PM
الكشف عن التجميعات المرتبطة (المحملة) مع أحد التطبيق
أنشئ مشروع Console Application واستبدل محتويات Module1.vb بالكود التالي
كود C#
كود VB
يقوم الإجراءا GetAssemblies() أحد اعضاء الفئة AppDomain بإرجاع التجميعات التي قام البرنامج ReflectionDemo بتحميلها والناتج هو التجميعين ReflectionDemo و MsCorLib
عند تنفيذ البرنامج سيظهر في ال Console مايلي:
الحصول على الأنواع الموجودة ضمن تجميع معيّن
أول ما يجب القيام به, هو تحميل التجميع ديناميكيا باستخدام الإجراء Assembly.Load().
كود VB
كود C#
بعد تحميل التجميع, يمكن الإجراء GetTypes() للحصول على مصفوفة من النوع Type
كود VB
كود C#
الأنواع العائدة يمكن أن تمثل إما فئات Classes, أو واجهات Interfaces, أو تراقيم Enumerations.
كود VB
كود C#
سيقوم الـ Console بعرض جميع الأنواع الموجودة ضمن التجميع mscorlib.dll, وهذا مجرد مقطع من الناتج:
تطبيق Reflection على نوع محدّد
في المثال التالي, سنقوم بعملية انعكاس على نوع واحد والكشف عن الأعضاء الخاصة به, الإجراء Type.GetType تأخذ معامل واحد من النوع string, وتعيد كائن من النوع الموافق, وللاستعلام عن أعضاء نوع معين نستخدم الإجراء Type.GetMembers والتي تعيد مصفوفة من النوع MemberInfo
كود VB:
كود C#
الناتج سيكون كالتالي:
الحصول على الأعضاء حسب أنواعها:
إرجاع كافة الأعضاء الخاصة بالنوع الذي نستعلم عنه.
إرجاع الإجراءات الخاصة بالنوع الذي نستعلم عنه.
إرجاع الحقول الخاصة بالنوع الذي نستعلم عنه.
إرجاع الخصائص الخاصة بالنوع الذي نستعلم عنه.
إرجاع الأحداث الخاصة بالنوع الذي نستعلم عنه.
إرجاع المنشئات الخاصة بالنوع الذي نستعلم عنه.
إرجاع الواجهات التي ينفذها النوع الذي نستعلم عنه.
أنشئ مشروع Console Application واستبدل محتويات Module1.vb بالكود التالي
كود C#
كود :
using System;
using System.Reflection ;
class ReferencedAssemblies
{
[STAThread]
static void Main(string[] args)
{
Assembly[] appAssemblies =
System.AppDomain.CurrentDomain.GetAssemblies ();
foreach (Assembly assembly in appAssemblies )
{
Console.WriteLine (assembly.FullName );
}
Console.ReadLine ();
}
}كود VB
كود :
Imports System.Reflection
Namespace ReflectionDemo
Class ReferencedAssemblies
Private Shared Sub Main(ByVal args As String())
Dim appAssemblies As Assembly() = System.AppDomain.CurrentDomain.GetAssemblies()
For Each assembly As Assembly In appAssemblies
Console.WriteLine(assembly.FullName)
Next
Console.ReadLine()
End Sub
End Classيقوم الإجراءا GetAssemblies() أحد اعضاء الفئة AppDomain بإرجاع التجميعات التي قام البرنامج ReflectionDemo بتحميلها والناتج هو التجميعين ReflectionDemo و MsCorLib
عند تنفيذ البرنامج سيظهر في ال Console مايلي:
كود :
mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ReflectionDemo, Version=1.0.1882.29904, Culture=neutral, PublicKeyTokenالحصول على الأنواع الموجودة ضمن تجميع معيّن
أول ما يجب القيام به, هو تحميل التجميع ديناميكيا باستخدام الإجراء Assembly.Load().
كود VB
كود :
Dim LoadedAssembly As Assembly = Assembly.Load("mscorlib.dll")كود :
Assembly LoadedAssembly = Assembly.Load("mscorlib.dll");بعد تحميل التجميع, يمكن الإجراء GetTypes() للحصول على مصفوفة من النوع Type
كود VB
كود :
Dim ExistingTypes As System.Type() = LoadedAssembly.GetTypes()كود C#
كود :
System.Type[] ExistingTypes = LoadedAssembly.GetTypes ();الأنواع العائدة يمكن أن تمثل إما فئات Classes, أو واجهات Interfaces, أو تراقيم Enumerations.
كود VB
كود :
Imports System
Imports System.Reflection
Namespace ReflectionDemo
Class ReflectedTypes
Private Shared Sub Main(ByVal args As String())
Dim LoadedAssembly As Assembly = Assembly.Load("mscorlib.dll")
Dim ExistingTypes As System.Type() = LoadedAssembly.GetTypes()
For Each type As Type In ExistingTypes
Console.WriteLine(type.ToString())
Next
Console.WriteLine(ExistingTypes.Length & " Types Discovered in mscorlib.dll")
Console.ReadLine()
End Sub
End Class
End Namespaceكود C#
كود :
using System;
using System.Reflection ;
namespace ReflectionDemoCSharp
{
class ReflectedTypes
{
[STAThread]
static void Main(string[] args)
{
Assembly LoadedAssembly = Assembly.Load ("mscorlib.dll");
System.Type[] ExistingTypes = LoadedAssembly.GetTypes ();
foreach(Type type in ExistingTypes)
Console.WriteLine (type.ToString ());
Console.WriteLine (ExistingTypes.Length +
" Types Discovered in mscorlib.dll");
Console.ReadLine ();
}
}
}سيقوم الـ Console بعرض جميع الأنواع الموجودة ضمن التجميع mscorlib.dll, وهذا مجرد مقطع من الناتج:
كود :
System.Object
System.ICloneable
System.Collections.IEnumerable
System.Collections.ICollection
System.Collections.IList
System.Array
System.Array+SorterObjectArray
System.Array+SorterGenericArray
System.Collections.IEnumerator
1480 Types Discovered in mscorlib.dllتطبيق Reflection على نوع محدّد
في المثال التالي, سنقوم بعملية انعكاس على نوع واحد والكشف عن الأعضاء الخاصة به, الإجراء Type.GetType تأخذ معامل واحد من النوع string, وتعيد كائن من النوع الموافق, وللاستعلام عن أعضاء نوع معين نستخدم الإجراء Type.GetMembers والتي تعيد مصفوفة من النوع MemberInfo
كود VB:
كود :
Imports System
Imports System.Reflection
Namespace ReflectionDemo
Class ReflectedTypes
Sub Main(ByVal args As String())
Dim TypeToReflect As Type = Type.GetType("System.Int32")
Dim Members As System.Reflection.MemberInfo() = TypeToReflect.GetMembers()
Console.WriteLine("Members of " & TypeToReflect.ToString())
Console.WriteLine()
For Each member As MemberInfo In Members
Console.WriteLine(member)
Next
Console.ReadLine()
End Sub
End Class
End Namespaceكود C#
كود :
using System;
using System.Reflection ;
namespace ReflectionDemoCSharp
{
class ReflectedTypes
{
[STAThread]
static void Main(string[] args)
{
Type TypeToReflect = Type.GetType("System.Int32");
System.Reflection.MemberInfo[] Members =TypeToReflect.GetMembers();
Console.WriteLine ("Members of "+TypeToReflect.ToString ());
Console.WriteLine();
foreach (MemberInfo member in Members )
Console.WriteLine(member);
Console.ReadLine ();
}
}
}الناتج سيكون كالتالي:
كود :
Members of System.Int32
Int32 MaxValue
Int32 MinValue
System.String ToString(System.IFormatProvider)
System.TypeCode GetTypeCode()
System.String ToString(System.String, System.IFormatProvider)
Int32 CompareTo(System.Object)
Int32 GetHashCode()
Boolean Equals(System.Object)
System.String ToString()
System.String ToString(System.String)
Int32 Parse(System.String)
Int32 Parse(System.String, System.Globalization.NumberStyles)
Int32 Parse(System.String, System.IFormatProvider)
Int32 Parse(System.String, System.Globalization.NumberStyles, System.IFormatProvider)
System.Type GetType()الحصول على الأعضاء حسب أنواعها:
كود :
Dim Members As System.Reflection.MemberInfo() = TypetoReflect.GetMembers()كود :
Dim Members As System.Reflection.MethodInfo() = TypetoReflect.GetMethods()إرجاع الإجراءات الخاصة بالنوع الذي نستعلم عنه.
كود :
Dim Members As System.Reflection.FieldInfo() = TypetoReflect.GetFields()كود :
Dim Members As System.Reflection.PropertiesInfo() = TypetoReflect.GetProperties()كود :
Dim Members As System.Reflection.EventInfo() = TypetoReflect.GetEvents()كود :
Dim Members As System.Reflection.ConstructorInfo() = TypetoReflect.GetConstructors()كود :
Dim Members As System.Type () = TypetoReflect.GetInterfaces()
