zoukankan      html  css  js  c++  java
  • 根据类名字符串创建类名并且调用类里的方法

    根据类名字符串实例化类,并调用类的方法或函数

    2011-03-15 13:32

    //获取类型信息

    //如果调用其他的DLL

    //System.Reflection.Assembly asmb = System.Reflection.Assembly.LoadFrom("DLL名");

    // Type t = asmb.GetType("类名");

    //如果是不调用其他DLL

    System.Reflection.Assembly BLL = System.Reflection.Assembly.Load("www.www.BLL");            

     System.Type t = BLL.GetType("www.www.BLL."+ViewState["BLL"].ToString());            

     try             {                

    //创建类型实例               

      object dObj = Activator.CreateInstance(t);                

     //获取方法的信息                

     System.Reflection.MethodInfo method = t.GetMethod("Delete");                

     //调用方法的一些标志位(根据你的方法的标志设置)                

     System.Reflection.BindingFlags flag = System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static;                

    //方法的参数                

     object[] parameters = new object[] { int.Parse(ViewState["ID"].ToString()) };                

    //取得方法返回的值               

      object returnValue = method.Invoke(dObj, flag, Type.DefaultBinder, parameters, null);           

      }            

     catch (System.Exception ex)             { }

     

    说明:

    Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL)
    object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例

    若要反射当前项目中的类可以为:
    Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
    object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例,返回为 object 类型,需要强制类型转换
    也可以为:
    Type type = Type.GetType("类的完全限定名");
    object obj = type.Assembly.CreateInstance(type);

    补充:
    1)反射创建某个类的实例时,必须保证使用类的完全限定名(命名空间 + 类名)。Type.GetType 方法返回 null 则意味搜索元数据中的相关信息失败(反射失败),请确保反射时使用类的完全限定名。
    2)反射功能十分强大,没有什么不能实现的。

    “跨程序集”(如下),请使用我给的第一种方法创建类的实例,并反射该实例的字段、属性、方法、事件... 然后动态调用之。

    “反射”其实就是利用程序集的元数据信息。

    “跨程序集”反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间,假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型):
    Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL)
    object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例

  • 相关阅读:
    fake data
    template 的简单使用
    computed what time passage pushed-
    drag And drop
    threeJs(1)
    使用babel
    PHP海补知识(2)-- 复合赋值操作
    PHP海补知识(1)-- 可变变量
    一个裸的Ubuntu系统,搭建LAMP需要配置这些东西
    Ubuntu Server 12.04 U盘启动盘打包
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/2242320.html
Copyright © 2011-2022 走看看