栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > .Net

C#通过反射加载外部程序集(dll库文件)

.Net 更新时间:发布时间: 百科书网 趣学号
C#通过反射加载外部程序集(dll库文件)

  本文章使用了一个C#通过反射加载一个类库的dll文件,获取库文件中的公共成员,执行这些变量
反射基础整理传送门


说明:
这个dll文件和我们的反射不在同一个程序集中

测试代码
将这个脚本类库打包成dll库文件

namespace 程序集
{
    public enum E_Type {
        Cat,
        Dog
    }
    class TestClass
    {
        public int id = 01;
        public string strId = "零零";

        #region 构造方法
        public TestClass() { }

        public TestClass(int id) {
            this.id = id;
        }

        public TestClass(int id,string str):this(id)
        {
            this.strId = str;
        }
        #endregion

        //输出动物叫
        public string AniWow(E_Type type)
        {
            string wow = "";
            switch (type)
            {
                case E_Type.Cat:
                    wow = "喵喵";
                    break;
                case E_Type.Dog:
                    wow = "狗狗";
                    break;
                default:
                    break;
            }

            return wow;
        }
    }
}

通过反射获取
这里代码注释说的很明白,不再细说

class Program
    {
        static void Main(string[] args)
        {
            //1.加载程序集
            Assembly assembly = Assembly.LoadFile(@"C:UsersAdministratorsourcereposCSharp反射程序集binDebug程序集.dll");
            //获取程序集下所有公共成员(类 枚举 结构体 )等等
            Type[] types = assembly.GetTypes();
        	//获取程序集下的枚举
            Type e_type = assembly.GetType("程序集.E_Type");    
            //获取具体的枚举变量就跟获取公共变量一样
            FieldInfo Info_Cat = e_type.GetField("Cat");
            Type test = assembly.GetType("程序集.TestClass");
            //实例化一个对象
            object obj = Activator.CreateInstance(test,1);
            //获取TestClass中的方法
            MethodInfo mInfo = test.GetMethod("AniWow");
            //执行方法 传入一个对象,如果是静态方法第一个参数为null几个,用object数组来传递对应参数
            object o= mInfo.Invoke(obj, new object[] {Enum.Parse(e_type,"Dog") });

            Console.WriteLine(o);
            //当我们不知道程序集中有什么,我们可以通过相关API打印获取
            //FieldInfo[] infos = e_type.GetFields();
            //for (int i = 0; i < infos.Length; i++)
            //{
            //    Console.WriteLine(infos[i]);
            //}
            Console.ReadKey();
        }
    }

到此我们可以正确的调用库文件中的AniWow()的方法了


在我们使用其它程序集中的成员变量,我们可能不知道里边都有什么,我们可以通过Type中的方法,获取这些公共的成员变量。

Type[] types = assembly.GetTypes();打印数组中的元素:

总结:

加载程序集的一般步骤:

  1. 首先使用Assembly.LoadFile()或者Assembly.LoadForm()加载我们所需加载的程序集
  2. 然后再获取程序集中的公共的类,因为不是一个程序集,这里传入的参数一定是带有命名空间的,否则获取不到 例如:System.Int32
    3.再通过基本的API去获取我们想要获取的内容,然后去操作它们。
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/985146.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号