其他分享
首页 > 其他分享> > 扎实基础_2语法基础_反射

扎实基础_2语法基础_反射

作者:互联网

1:反射是什么

  微软提供的一个帮助类库,为了让我们不用在vs里面添加引用从而直接动态加载dll 去用里面的方法

2:为什么要用反射

  使用第三方类库下

3:如何使用反射

  

using IOC示例;
using System;
using System.Reflection;//1 添加使用反射的类库
namespace 泛型
{
    class Program
    {
        static void Main(string[] args)
        {
            //2加载dll
            //Assembly assembly = Assembly.Load("IOC示例 ");// dll名称  默认到当前目录下查找
            //Assembly assembly2 = Assembly.LoadFrom("IOC示例.dll");// 全名称查找
            Assembly assembly3 = Assembly.LoadFile(@"C:\Users\Administrator\source\repos\ConsoleApp1\IOC示例\bin\Debug\netcoreapp3.1\IOC示例.dll");// 全名称= 全路径+dll名称 + 后缀
            //3 获取dll的类
            Type type = assembly3.GetType("IOC示例.IOC_kaimotuo");
            //4 创建对象
            object ob = Activator.CreateInstance(type);
            //5 调用方法 
            dynamic dDbHelper = Activator.CreateInstance(type);//dynamic 是一个动态类型
            dDbHelper.随便写什么都不会报错(); //可以避开编译器的检查,运行时检查  存在安全问题
            //知识扩展
            //因为c#是强类型语言,所以在编译的时候就会确定类型 使用dynamic可以把类型推迟到运行时检查,但是由此就会引发安全问题
            //6  类型限定与转换
            IDrivingCar iDBHelper = ob as IDrivingCar;
            //7  调用方法
            iDBHelper.kaiche();
            //8;想要使用一个dll里面的类方法这么麻烦,和我原先直接类实例化差别好大,如果我要使用别的那是不是又得复制黏贴
            //仔细揣摩以后的需求,这里好像是关于类的创建,那么是不是和设计模式的创建型里面的工厂模式很像
            //反射+简单工厂+配置文件,完成动态加载dll
            SimlpFactory simlpFactory = new SimlpFactory();
            var a=  SimlpFactory.CreateInstentce();
            a.kaiche();
            Console.WriteLine("Hello World!");
        }
    }
}
View Code

 

 

 

 

标签:类库,反射,Assembly,示例,基础,dll,语法,扎实,IOC
来源: https://www.cnblogs.com/LZXX/p/12957296.html