您现在的位置是:主页>文章>C# 反射 网站首页

C# 反射

1.什么是反射
        Reflection,中文翻译为反射。
        这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:程序集(Assembly)、模块(Module)、类型 (class)组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息.

        反射和引用调用的区别个人觉得就是一个是在运行期处理一个是在设计时处理的。而且反射可以通过string来取得类和方法,灵活性高。引用DLL是静态声明的,必须给出类型,不能根据string构造对象。

2.使用类介绍    

    (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。
    (2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
    (3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。
    (4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。
    (5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。
    (6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。
    (7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。
    (8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。

反射用到的命名空间:

    System.Reflection

    System.Type

    System.Reflection.Assembly

3.例子

    Assembly aby = Assembly.Load("ClassLibrary");

    //Assembly aby = Assembly.LoadFrom("xxx.dll的路径");

    Type t = aby.GetType("ClassLibrary.Mcalvin");

    object obj = Activator.CreateInstance(t, "mcalvin", "http://www.mcalvin.net");//用Activator的CreateInstance静态方法,生成新对象,使用有两个参数的构造函数

    MethodInfo mi = t.GetMethod("show");

    mi.Invoke(obj , null);//调用方法

   

Top