C#高级语法之反射

1.反射加载DLL

以下提供了两种加载DLL的方式
1.使用方法 Assembly.Load 加载
2.使用方法 Assembly.LoadFile 加载

            Assembly assembly;
            string path;
            //1.动态加载
            path = "HslCommunication";
            assembly =Assembly.Load(path);

            path = "c:\\users\\刘哲\\documents\\visual studio 2015\\Projects\\Practice\\Practice\\bin\\Debug\\DLLS\\HslCommunication.dll";
            assembly = Assembly.LoadFile(path);

2.反射方法

            Assembly assembly;
            string path;
            //1.动态加载
            //path = "HslCommunication";
            //assembly =Assembly.Load(path);

            path = "c:\\users\\刘哲\\documents\\visual studio 2015\\Projects\\Practice\\Practice\\bin\\Debug\\DLLS\\HslCommunication.dll";
            assembly = Assembly.LoadFile(path);

            Type[] types = assembly.GetTypes();//获取程序集中定义的类型
            foreach (Type type in types)
            {
                MethodInfo[] methodInfos = type.GetMethods();//获取方法
                foreach (MethodInfo methodInfo in methodInfos)
                {
                    
                }
            }

3.创建对象

            {
                //1.动态加载
                path = "CommonTool";
                assembly = Assembly.Load(path);
                //2.获取类型
                Type[] types = assembly.GetTypes();//获取程序集中定义的类型
                string FullName = "CommonTool.LogMgr";
                Type mType = assembly.GetType(FullName);
                //3.创建对象
                object obj = Activator.CreateInstance(mType);
                (obj as CommonTool.LogMgr).WriteLog("111");
                ///通过动态类型创建
                dynamic mObj= Activator.CreateInstance(mType);
                mObj.WriteLog("222");                
            }

4.获取方法

                //1.动态加载
                path = "CommonTool";
                assembly = Assembly.Load(path);
                //2.获取类型
                Type[] types = assembly.GetTypes();//获取程序集中定义的类型
                string FullName = "CommonTool.LogMgr";
                Type mType = assembly.GetType(FullName);
                //3.创建对象
                object obj = Activator.CreateInstance(mType);
                //4.获取方法
                MethodInfo methodInfo = mType.GetMethod("WriteLog");
                methodInfo.Invoke(obj,new object[]
                {
                    "5565"
                });

4.1方法重载

 //1.动态加载
                path = "CommonTool";
                assembly = Assembly.Load(path);
                //2.获取类型
                Type[] types = assembly.GetTypes();//获取程序集中定义的类型
                string FullName = "CommonTool.RTest";
                Type mType = assembly.GetType(FullName);
                //3.创建对象
                object obj = Activator.CreateInstance(mType);
                //4.获取方法
                MethodInfo methodInfo = mType.GetMethod("T1",new Type[0]);
                methodInfo.Invoke(obj, new object[0]);
                //4.1方法重载
                methodInfo = mType.GetMethod("T1",new Type[] {typeof(int)});
                methodInfo.Invoke(obj, new object[]
                {
                    4
                });

                methodInfo = mType.GetMethod("T1", new Type[] { typeof(string) });
                methodInfo.Invoke(obj, new object[]
                {
                   "55"
                });

                methodInfo = mType.GetMethod("T1", new Type[] { typeof(int), typeof(string) });
                methodInfo.Invoke(obj, new object[]
                {
                   5, "55"
                });

4.2反射的黑科技

1.单例类

    /// <summary>
    /// 单例模式:类,能保证在整个进程中只有一个实例
    /// </summary>
    public sealed class Singleton
    {
        private static Singleton _Singleton = null;
        private Singleton()
        {
            Console.WriteLine("Singleton被构造");
        }

        static Singleton()
        {
            _Singleton = new Singleton();
        }

        public static Singleton GetInstance()
        {
            return _Singleton;
        }
    }
在这里插入代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LEO20210522

求打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值