c# 反射

一、反射获取程序集的三种方式

  1. Assembly assembly = Assembly.Load(“YourDLLNameSpace”);
    注意需要首先添加该项目的项目引用,这种方式只需要提供程序集的名称即可。
  2. Assembly assembly = Assembly.LoadFile(“Path”);
    path为该dll所存在的根目录,这种方式需要提供程序集的完整的路径
    根目录的获取方法 string path = AppDomain.CurrentDomain.BaseDictory+“YourDLL.dll”;
  3. Assembly assembly = Assembly.LoadForm(“YourDLL.dll”);
    这种方式需要提供程序集的名称及后缀名

二、获取类型

1.assembly.GetType(); //获取所有的类型
2.assembly.GetType(“命名空间.类名”) ;// 获取指定的类型

三、获取类下面的具体属性、方法、字段

        Type type = assembly.GetType("MyFilesOper.test");
        PropertyInfo[] properties = type.GetProperties(); //属性
        FieldInfo[] fieldInfos = type.GetFields(); //字段
        MethodInfo[] methodInfo = type.GetMethods(); //方法

四、实例化(多态的使用)

使用多态的特性,来实例化反射所创建的实例

以下为Msql数据库和SqlServer数据库在项目中,通过反射进行调用,然后两个数据库Helper类都继承自IDBManger,通过实例化IDBManager从而实现对内部的方法调用。将不同数据库的程序集,以及类名储存至配置文件中,从配置文件中读取,实现不同数据库的相互切换

   string dllName=  ConfigurationManager.AppSettings["DBType"].Split('|')[0];
   string className=  ConfigurationManager.AppSettings["DBType"].Split('|')[1];

   Assembly assembly = Assembly.LoadFrom(dllName);
   IDBManager manager = (IDBManager)assembly.CreateInstance(className);

   string res = manager.ReturnMsg();
   Console.WriteLine(res);

当实例化带有参数的构造函数的时候,如果直接在类中增加一个构造函数的话在使用CreateInstance时会报错,这时需要使用到关键字params 这个关键字后面跟的字符长度是可以变化的,可传也可以不传,需要注意的是,如果存在多个参数的话,用parmas修饰的参数需要放在最后一个参数中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值