反射一

反射概述

      程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集,模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,而可以调用类型的方法或访问其字段和属性。反射通常具有以下用途

 

使用Assembly定义和加载程序集,加载在程序集清单中列出的模块,以及从该程序集中查找类型并创建改类型的实例。

 

使用Module了解如下的类似信息:包含模块的程序集以及模块中的类等。还可以获取在模块上定义的所有全局方法或其他特定的非全局方法

 

使用ConsructorInfo了解如下的类似信息:构造函数的名称,参数,访问修饰符和实现的详细信息(如abstract或virtual)等。

使用Type的GetConstructors或GetConstructor方法来调用特定的构造函数

 

使用Methodinfo来了解如下的类似信息:方法的名称,返回类型,参数,访问修饰符,和实现详细信息。使用Type的GetMethods或 GetMethod方法来调用特定的方法

 

使用 FieldInfo 来了解如下的类似信息:字段的名称、访问修饰符(如 public 或 private)和实现详细信息(如 static)等;并获取或设置字段值。

使用EventInfo 来了解如下的类似信息,事件的名称,事件处理程序数据类型,自定义属性,声明类型或反射类型等:并添加或移除时间处理程序

 

使用 PropertyInfo 来了解如下的类似信息:属性的名称、数据类型、声明类型、反射类型和只读或可写状态等;并获取或设置属性值。


使用 ParameterInfo 来了解如下的类似信息:参数的名称、数据类型、参数是输入参数还是输出参数,以及参数在方法签名中的位置等。

System.Reflection.Emit 命名空间的类提供了一种特殊形式的反射,使您能够在运行时构造类型。
    反射也可用于创建称作类型浏览器的应用程序,它使用户能够选择类型,然后查看有关选定类型的信息。
    反射还有其他一些用途。JScript 等语言编译器使用反射来构造符号表。System.Runtime.Serialization 命名空间中的类使用反射来访问数据并确定要持久保存的字段。System.Runtime.Remoting 命名空间中的类通过序列化来间接地使用反射。

 

反射实现简单工厂模式
1、定义接口
public interface IPBOExplorerHandler
2、实现接口
public class DOCExplorerHandler : IPBOExplorerHandler
public class CHGExplorerHandler  : IPBOExplorerHandler
public class PARTExplorerHandler : IPBOExplorerHandler
public class REQExplorerHandler  : IPBOExplorerHandler
3、反射实现
public static IPBOExplorerHandler CreateIPBO(string strHandlerName)
{
       string strAssembly = Application.StartupPath + "//ZTE.PDM.PART.WinUI.dll";
       string strTypeName = "ZTE.PDM.PART.WinUI." + strHandlerName;
       object  obj  = Activator.CreateInstance(Assembly.LoadFrom(strAssembly).GetType(strTypeName));
       IPBOExplorerHandler myHandler = obj as IPBOExplorerHandler;
       return myHandler;
}
4、简单工厂
public static IPBOExplorerHandler MakeIPBO(string strHandlerName)
{
    IPBOExplorerHandler myHandler;
    switch(strHandlerName)
    {
           case "DOC" : myHandler = new DOCExplorerHandler(); break;
           case "CHG" : myHandler = new CHGExplorerHandler(); break;
           case "PART" :myHandler = new PARTExplorerHandler();break;
           case "REQ" : myHandler = new REQExplorerHandler(); break;
           default: myHandler = new DOCExplorerHandler();break;
     }
     return myHandler;
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/nileel/archive/2007/04/17/1567589.aspx

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值