C# 反射调用dll中的方法

时间:2021-06-02 18:18:16   收藏:0   阅读:0

反射提供描述程序集、模块和类型的对象(Type 类型)。 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后调用其方法或访问器字段和属性。 如果代码中使用了特性,可以利用反射来访问它们

namespace assembly_name  
{  
    public class assembly_class  
    {  
        private string m_strPara;
        public assembly_class(string strPara)  
        {
            this.m_strPara=strPara;
        }    
        public string assembly_Test(Dictionary<string, string> dictPara)  
        {  
            //do something
            return "my result";
        }  
    }  
}

  

上边写一个测试类,名称空间是assembly_name,类名是assembly_class,类名下有个方法assembly_Test参数是字典类型,并且返回值是string类型;在我本地生成了这个类,生成后的dll假设为assembly.dll;下文中的Test方法反射调用了dll中的assembly_Test方法

public virtual string Test(Dictionary<string, string> dictPara)
        {
            string result = string.Empty;
            try
            {
                string strPara = "this is parameter";
                //加载程序集(dll文件地址),使用Assembly类   
                //Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "assembly.dll");   //这种方式会导致dll组件被占用故不采用该方式
                byte[] file = System.IO.File.ReadAllBytes(AppDomain.CurrentDomain.BaseDirectory + "assembly.dll");
                System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(file);
                //获取类型,参数(名称空间+类)   
                Type type = assembly.GetType("assembly_name.assembly_class");
                //创建该对象的实例,object类型,参数(名称空间+类)   
                object instance = assembly.CreateInstance("assembly_name.assembly_class", true, System.Reflection.BindingFlags.Default, null, new object[] { strPara }, null, null);
                //方法参数类型和参数
                Type[] params_type = { typeof(Dictionary<string, string>) };
                Object[] params_obj = { dictPara };
                //执行方法   
                result = (string)type.GetMethod("GetAccessory", params_type).Invoke(instance, params_obj);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return result;
        }

  

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!