عرض معلومات نوع

System.Typeالفئة هو المركزي للانعكاس. وقت تشغيل اللغة العامة بإنشاء من نوع لنوع تم تحميله عندما يطلب الانعكاس عليه. يمكنك استخدام نوع كائن لأساليب حقول، الخصائص والفصول الدراسية المتداخلة إلى معرفة كل شيء حول هذا النوع.

استخدام Assembly.GetTypeأو Assembly.GetTypesإلى الحصول على الكائنات نوع من تجميعات التي قد لا يتم تم تحميله، تمرير في اسم من الذي نوع أو أنواع الذي تريده. استخدام Type.GetTypeللحصول على الالكائنات نوع من تجميع الذي تم تحميله مسبقاً. استخدام Module.GetTypeو Module.GetTypesإلى الحصول على وحدة نمطية الكائنات نوع .

ملاحظةملاحظة

إذا كنت تريد إلى فحص ومعالجة الأنواع العامة والأساليب، الرجاء الاطلاع على مزيد من المعلومات المتوفرة في أنواع و عام انعكاسو كيفية القيام بما يلي: قم بفحص و إنشاء مثيل لأنواع عامة مع انعكاس.

يظهر المثال التالي بناء الجملة الضروري إلى الحصول على Assemblyالكائن والوحدة النمطية لعنصر تجميع.

' Gets the mscorlib assembly in which the object is defined.
Dim a As Reflection.Assembly = GetType(Object).Module.Assembly
// Gets the mscorlib assembly in which the object is defined.
Assembly a = typeof(Object).Module.Assembly;

يلي مثال يوضح الكائنات نوع إحضار من تجميع تحميله.

' Loads an assembly using its file name.
Dim a As Reflection.Assembly = Reflection.Assembly.LoadFrom("MyExe.exe")
' Gets the type names from the assembly.
Dim types2 As Type() = a.GetTypes()
Dim t As Type
For Each t In  types2
    Console.WriteLine(t.FullName)
Next t
// Loads an assembly using its file name.
Assembly a = Assembly.LoadFrom ("MyExe.exe");
// Gets the type names from the assembly.
Type [] types2 = a.GetTypes ();
foreach (Type t in types2)
{
    Console.WriteLine (t.FullName);
}

بمجرد أن تحصل على نوع ، هناك العديد من الطرق التي يمكن أن تكتشف معلومات حول الأعضاء التي نوع. ل مثال، يمكنك معرفة حول الأعضاء الجميع نوع بواسطة استدعاء Type.GetMembersالأسلوب، الذي يحصل على صفيفة من MemberInfoالكائنات التي تصف كل من الأعضاء النوع الحالي.

يمكنك أيضا استخدام الوظائف تشغيل نوع الفئة إلى استرداد المعلومات في واحد أو المزيد construcإلىrs الطرق، أحداث، حقول أو الخصائص التي تحددها بالاسم. على سبيل المثال، Type.GetConstructorيغلف الدالة الإنشائية معين من فئة. الحالي

إذا كان لديك على نوع ، يمكنك استخدام Type.Moduleخاصية للحصول على كائن وحدة نمطية? التي تحتوي على الذي يغلف نوع. استخدام Module.Assemblyخاصية تعيين موقع كائن ما الذي يغلف تجميع الذي يحتوي على وحدة نمطية. يمكنك الحصول على تجميع الذي يغلف النوع مباشرة باستخدام Type.Assemblyخاصية.

النظام.نوع و ConstructorInfo

The following مثال shows how إلى قائمة the constructors for a فئة, في this حالة, the String فئة.

' This program lists all the public constructors 
' of the System.String class.
Imports System
Imports System.Reflection
Class ListMembers
    Public Shared Sub Main()
        Dim t As Type = GetType(String)
        Console.WriteLine("Listing all the public constructors of the {0} type", t)
        ' Constructors.
        Dim ci As ConstructorInfo() = t.GetConstructors((BindingFlags.Public Or BindingFlags.Instance))
        Console.WriteLine("//Constructors")
        PrintMembers(ci)
    End Sub
    Public Shared Sub PrintMembers(ms() As MemberInfo)
        Dim m As MemberInfo
        For Each m In ms
            Console.WriteLine("{0}{1}", "     ", m)
        Next m
        Console.WriteLine()
    End Sub
End Class
// This program lists all the public constructors 
// of the System.String class.
using System;
using System.Reflection;
class ListMembers {
    public static void Main(String[] args) {
        Type t = typeof(System.String);
        Console.WriteLine ("Listing all the public constructors of the {0} type", t);
        // Constructors.
        ConstructorInfo[] ci = t.GetConstructors(BindingFlags.Public | BindingFlags.Instance);
        Console.WriteLine ("//Constructors");
        PrintMembers (ci);
    }
    public static void PrintMembers(MemberInfo [] ms) {
        foreach (MemberInfo m in ms) {
            Console.WriteLine ("{0}{1}", "     ", m);
        }
        Console.WriteLine();
    }
}

MemberInfo, MethodInfo, FieldInfo, و PropertyInfo

Obtain معلومات حول the نوع's وظائف, خصائص, أحداث, و حقول using MemberInfo, MethodInfo, FieldInfo, أو PropertyInfo الكائنات.

The following مثال uses MemberInfo إلى قائمة the رقم of الأعضاء في the النظام.IO.ملف فئة و uses the النظام.نوع.IsPublic خاصية إلى determine the رؤية of the فئة.

Option Explicit
Option Strict
Imports System
Imports System.IO
Imports System.Reflection
Imports Microsoft.VisualBasic
Class Mymemberinfo
    Public Shared Sub Main()
        Console.WriteLine(ControlChars.Cr & "Reflection.MemberInfo")
        ' Gets the Type and MemberInfo.
        Dim MyType As Type = Type.GetType("System.IO.File")
        Dim Mymemberinfoarray As MemberInfo() = MyType.GetMembers()
        ' Gets and displays the DeclaringType method. 
        Console.WriteLine(ControlChars.Cr & "There are {0} members in {1}.", Mymemberinfoarray.Length, MyType.FullName)
        Console.WriteLine("{0}.", MyType.FullName)
        If MyType.IsPublic Then
            Console.WriteLine("{0} is public.", MyType.FullName)
        End If
    End Sub
End Class
using System;
using System.IO;
using System.Reflection;

class Mymemberinfo
{ 
    public static void Main(string[] args)
    { 
        Console.WriteLine ("\nReflection.MemberInfo");
        // Gets the Type and MemberInfo.
        Type MyType =Type.GetType("System.IO.File");
        MemberInfo[] Mymemberinfoarray = MyType.GetMembers(); 
        // Gets and displays the DeclaringType method. 
        Console.WriteLine("\nThere are {0} members in {1}.", 
            Mymemberinfoarray.Length, MyType.FullName);
        Console.WriteLine("{0}.", MyType.FullName); 
        if (MyType.IsPublic)
        {
            Console.WriteLine("{0} is public.", MyType.FullName);
        }
    }
}

The following مثال investigates the نوع of the specified عضو. It performs انعكاس تشغيل a عضو of the MemberInfo فئة, و lists its نوع.

' This code displays information about the GetValue method of FieldInfo.
Option Explicit
Option Strict
Imports System
Imports System.Reflection
Class MyMethodInfo
    Public Shared Sub Main()
        Console.WriteLine("Reflection.MethodInfo")
        ' Gets and displays the Type.
        Dim MyType As Type = Type.GetType("System.Reflection.FieldInfo")
        ' Specifies the member for which you want type information.
        Dim Mymethodinfo As MethodInfo = MyType.GetMethod("GetValue")
        Console.WriteLine((MyType.FullName & "." & Mymethodinfo.Name))
        ' Gets and displays the MemberType property.
        Dim Mymembertypes As MemberTypes = Mymethodinfo.MemberType
        If MemberTypes.Constructor = Mymembertypes Then
            Console.WriteLine("MemberType is of type All")
        ElseIf MemberTypes.Custom = Mymembertypes Then
            Console.WriteLine("MemberType is of type Custom")
        ElseIf MemberTypes.Event = Mymembertypes Then
            Console.WriteLine("MemberType is of type Event")
        ElseIf MemberTypes.Field = Mymembertypes Then
            Console.WriteLine("MemberType is of type Field")
        ElseIf MemberTypes.Method = Mymembertypes Then
            Console.WriteLine("MemberType is of type Method")
        ElseIf MemberTypes.Property = Mymembertypes Then
            Console.WriteLine("MemberType is of type Property")
        ElseIf MemberTypes.TypeInfo = Mymembertypes Then
            Console.WriteLine("MemberType is of type TypeInfo")
        End If
        Return
    End Sub
End Class
// This code displays information about the GetValue method of FieldInfo.
using System;
using System.Reflection;
class MyMethodInfo {
    public static int Main() {
        Console.WriteLine("Reflection.MethodInfo");
        // Gets and displays the Type.
        Type MyType = Type.GetType("System.Reflection.FieldInfo");
        // Specifies the member for which you want type information.
        MethodInfo Mymethodinfo = MyType.GetMethod("GetValue");
        Console.WriteLine(MyType.FullName + "." + Mymethodinfo.Name);
        // Gets and displays the MemberType property.
        MemberTypes Mymembertypes = Mymethodinfo.MemberType;
        if (MemberTypes.Constructor == Mymembertypes) {
            Console.WriteLine("MemberType is of type All"); 
        }
        else if (MemberTypes.Custom == Mymembertypes) {
            Console.WriteLine("MemberType is of type Custom"); 
        }
        else if (MemberTypes.Event == Mymembertypes) {
            Console.WriteLine("MemberType is of type Event"); 
        }
        else if (MemberTypes.Field == Mymembertypes) {
            Console.WriteLine("MemberType is of type Field"); 
        }
        else if (MemberTypes.Method == Mymembertypes) {
            Console.WriteLine("MemberType is of type Method"); 
        }
        else if (MemberTypes.Property == Mymembertypes) {
            Console.WriteLine("MemberType is of type Property"); 
        }
        else if (MemberTypes.TypeInfo == Mymembertypes) {
            Console.WriteLine("MemberType is of type TypeInfo"); 
        }
        return 0;
    }
}

يستخدم المثال التالي الجميع في انعكاس * معلومات فئة عم $ $ $ $ بالإضافة إلى BindingFlagsلسرد الجميع أعضاء (المنشئات، حقول والخصائص، أحداث وأساليب) المحدد فئة، تقسيم الأعضاء إلى ثابت وفئات المثيل.

' This program lists all the members of the 
' System.IO.BufferedStream class.
Imports System
Imports System.IO
Imports System.Reflection
Imports Microsoft.VisualBasic
Class ListMembers
    Public Shared Sub Main()
        ' Specifies the class.
        Dim t As Type = GetType(System.IO.BufferedStream)
        Console.WriteLine("Listing all the members (public and non public) of the {0} type", t)
        ' Lists static fields first.
        Dim fi As FieldInfo() = t.GetFields((BindingFlags.Static Or BindingFlags.NonPublic Or BindingFlags.Public))
        Console.WriteLine("// Static Fields")
        PrintMembers(fi)
        ' Static properties.
        Dim pi As PropertyInfo() = t.GetProperties((BindingFlags.Static Or BindingFlags.NonPublic Or BindingFlags.Public))
        Console.WriteLine("// Static Properties")
        PrintMembers(pi)
        ' Static events.
        Dim ei As EventInfo() = t.GetEvents((BindingFlags.Static Or BindingFlags.NonPublic Or BindingFlags.Public))
        Console.WriteLine("// Static Events")
        PrintMembers(ei)
        ' Static methods.
        Dim mi As MethodInfo() = t.GetMethods((BindingFlags.Static Or BindingFlags.NonPublic Or BindingFlags.Public))
        Console.WriteLine("// Static Methods")
        PrintMembers(mi)
        ' Constructors.
        Dim ci As ConstructorInfo() = t.GetConstructors((BindingFlags.Instance Or BindingFlags.NonPublic Or BindingFlags.Public))
        Console.WriteLine("// Constructors")
        PrintMembers(ci)
        ' Instance fields.
        fi = t.GetFields((BindingFlags.Instance Or BindingFlags.NonPublic Or BindingFlags.Public))
        Console.WriteLine("// Instance Fields")
        PrintMembers(fi)
        ' Instance properites.
        pi = t.GetProperties((BindingFlags.Instance Or BindingFlags.NonPublic Or BindingFlags.Public))
        Console.WriteLine("// Instance Properties")
        PrintMembers(pi)
        ' Instance events.
        ei = t.GetEvents((BindingFlags.Instance Or BindingFlags.NonPublic Or BindingFlags.Public))
        Console.WriteLine("// Instance Events")
        PrintMembers(ei)
        ' Instance methods.
        mi = t.GetMethods((BindingFlags.Instance Or BindingFlags.NonPublic Or BindingFlags.Public))
        Console.WriteLine("// Instance Methods")
        PrintMembers(mi)
        Console.WriteLine(ControlChars.CrLf & "Press ENTER to exit.")
        Console.Read()
    End Sub
    Public Shared Sub PrintMembers(ms() As MemberInfo)
        Dim m As MemberInfo
        For Each m In  ms
            Console.WriteLine("{0}{1}", "     ", m)
        Next m
        Console.WriteLine()
    End Sub
End Class
// This program lists all the members of the 
// System.IO.BufferedStream class.
using System;
using System.IO;
using System.Reflection;

class ListMembers {
    public static void Main(String[] args) {
        // Specifies the class.
        Type t = typeof (System.IO.BufferedStream);
        Console.WriteLine ("Listing all the members (public and non public) of the {0} type", t);

        // Lists static fields first.
        FieldInfo [] fi = t.GetFields (BindingFlags.Static | 
         BindingFlags.NonPublic | BindingFlags.Public);
        Console.WriteLine ("// Static Fields");
        PrintMembers (fi);

        // Static properties.
        PropertyInfo [] pi = t.GetProperties (BindingFlags.Static | 
         BindingFlags.NonPublic | BindingFlags.Public);
        Console.WriteLine ("// Static Properties");
        PrintMembers (pi);

        // Static events.
        EventInfo [] ei = t.GetEvents (BindingFlags.Static | 
         BindingFlags.NonPublic | BindingFlags.Public);
        Console.WriteLine ("// Static Events");
        PrintMembers (ei);

        // Static methods.
        MethodInfo [] mi = t.GetMethods (BindingFlags.Static | 
         BindingFlags.NonPublic | BindingFlags.Public);
        Console.WriteLine ("// Static Methods");
        PrintMembers (mi);

        // Constructors.
        ConstructorInfo [] ci = t.GetConstructors (BindingFlags.Instance | 
         BindingFlags.NonPublic | BindingFlags.Public);
        Console.WriteLine ("// Constructors");
        PrintMembers (ci);

        // Instance fields.
        fi = t.GetFields (BindingFlags.Instance | BindingFlags.NonPublic | 
         BindingFlags.Public);
        Console.WriteLine ("// Instance Fields");
        PrintMembers (fi);

        // Instance properites.
        pi = t.GetProperties (BindingFlags.Instance | BindingFlags.NonPublic | 
         BindingFlags.Public);
        Console.WriteLine ("// Instance Properties");
        PrintMembers (pi);

        // Instance events.
        ei = t.GetEvents (BindingFlags.Instance | BindingFlags.NonPublic | 
         BindingFlags.Public);
        Console.WriteLine ("// Instance Events");
        PrintMembers (ei);

        // Instance methods.
        mi = t.GetMethods (BindingFlags.Instance | BindingFlags.NonPublic   
         | BindingFlags.Public);
        Console.WriteLine ("// Instance Methods");
        PrintMembers (mi);

        Console.WriteLine ("\r\nPress ENTER to exit.");
        Console.Read();
    }

    public static void PrintMembers (MemberInfo [] ms) {
        foreach (MemberInfo m in ms) {
            Console.WriteLine ("{0}{1}", "     ", m);
        }
        Console.WriteLine();
    }
}

راجع أيضًا:

المرجع

BindingFlags

Assembly.GetType

Assembly.GetTypes

Type.GetType

Type.GetMembers

Type.GetFields

Module.GetType

Module.GetTypes

MemberInfo

ConstructorInfo

MethodInfo

FieldInfo

EventInfo

ParameterInfo

المبادئ

أنواع و عام انعكاس