zoukankan      html  css  js  c++  java
  • C#反射动态调用dll中的方法,并返回结果

    最近在看工厂开发模式,发现用到了反射,之前只听说过也没怎么用过;所以花了点时间重新温习了一遍;

    反射的作用是动态的加载某个dll(程序集),并执行该程序集中的某个方法,并返回结果;当然也可以给该方法传递参数

    namespace assembly_name  
    {  
        public class assembly_class  
        {  
            public string Show_Str(string str)  
            {  
                if (string.IsNullOrEmpty(str))  
                    return "你没有传参数进来";  
                else  
                    return "有参数,参数是:" + str;  
            }  
        }  
    }

    上边写一个测试类,名称空间是assembly_name,类名是assembly_class,类名下有个方法Show_Str参数是string类型,并且返回值是string类型;

    在我本地生成了这个类,生成后的dll是App_Code.dll(这个可以根据你的情况来,不完全是App_Code.dll),接着要把这个dll添加引用到你的项目中(重要);

    //加载程序集(dll文件地址),使用Assembly类   
    Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "Bin/App_Code.dll");  
      
    //获取类型,参数(名称空间+类)   
    Type type = assembly.GetType("assembly_name.assembly_class");  
      
    //创建该对象的实例,object类型,参数(名称空间+类)   
    object instance = assembly.CreateInstance("assembly_name.assembly_class");  
      
    //设置Show_Str方法中的参数类型,Type[]类型;如有多个参数可以追加多个   
    Type[] params_type = new Type[1];  
    params_type[0] = Type.GetType("System.String");  
    //设置Show_Str方法中的参数值;如有多个参数可以追加多个   
    Object[] params_obj = new Object[1];  
    params_obj[0] = "jiaopeng";  
      
    //执行Show_Str方法   
    object value = type.GetMethod("Show_Str", params_type).Invoke(instance, params_obj);   
    -------长沙程序员技术交流QQ群:428755207-------
  • 相关阅读:
    _ 下划线 Underscores __init__
    Page not found (404) 不被Django的exception中间件捕捉 中间件
    从装修儿童房时的门锁说起
    欧拉定理 费马小定理的推广
    线性运算 非线性运算
    Optimistic concurrency control 死锁 悲观锁 乐观锁 自旋锁
    Avoiding Full Table Scans
    批量的单向的ssh 认证
    批量的单向的ssh 认证
    Corrupted MAC on input at /usr/local/perl/lib/site_perl/5.22.1/x86_64-linux/Net/SSH/Perl/Packet.pm l
  • 原文地址:https://www.cnblogs.com/qq4004229/p/2882409.html
Copyright © 2011-2022 走看看