反射

要把反射用到的dll拷贝到当前程序运行的根目录中

Assembly可以加载DLL程序集 (反射的方式加载程序器)

Assembly assembly = Assembly.Load("Ruanmou.DB.Sqlserver");

找到这个类

直接new一个具体对象是直接写死了   

字符串不算写死 可以吧字符串统一到配置文件中 

 只有需要修改程序中的代码才算写死   配置文件随时可以修改

利用反射 不依赖于接口的实现 依赖于接口

 连接口都不用依赖  不需要通过具体对象和接口可以调用 类的方法

如果这个类是有带参数的构造函数  在CreateInstance方法的第二个参数中添加

反射可以获取类中私有的方法 构造函数      可以破坏单例模式

一个类库生成两个文件 一个dll  一个pdb  我们只需要dll  pdb是调试需要的文件 可以不用

如果要获取泛型类  assembly.GetType("DB.Sqlhelp.ReflectionTestcs`2");  表示该泛型类有两个T参数

***************************

            var allTypes = typeof(IProfile)
                .Assembly
                .GetTypes()
                .Where(type => type.IsClass)
                .Where(type => typeof(IProfile).GetTypeInfo().IsAssignableFrom(type))
                .ToList();

  1.获取IProfile接口所在的程序集

  2获取这个程序集中的所有类

  3.所有类中排除接口和值类型的类

  4.当前type类需要实现IProfile接口

原文地址:https://www.cnblogs.com/jiangchengbiao/p/9918010.html