泛型
2.0 泛型的好处和原理
泛型:解决代码重用,满足不同类型的参数 可以用相同的方法
调用的时候 不需要声明类型,由编译器推断出来
但是 类型参数和参数必须匹配
泛型的思想 就是延迟声明
延迟声明:把参数类型的声明推迟到调用的时候声明
架构设计有一句话: 延迟 ,推迟一切可以推迟的东西
System.Collections.Generic.List`1[System.Int32]
___ ` 表示 占位符, 有几个类型参数 就显示几
IL:中间语言
{}叫做code block,代码块。
代码块的作用有两个,一个是作为界符,比如一个if包含多个语句,那么如果没有{},就不知道if内执行的语句和if后执行的语句怎么区分
另一个是控制变量作用域
泛型约束,基类约束:
1 在泛型方法内可以直接使用基类的属性和方法
2 调用的时候,只能传递基类或者基类的子类
in 逆变,out 协变 只存在泛型接口或者泛型委托中 作用 扩展泛型的使用
out 协变 只能是返回结果 用于父类可以实例子类
int 协变 只能是参数 用于子类可以实例父类
反射
原理:ado.net提供的帮助类库,可以读取我们编译生成的metadata(元数据)里面的信息
作用一:通过配置文件App.config+简单工厂,可以把项目变成可配置的,可扩展
操作
引用命名空间 using System.Reflection;
//1 动态加载 默认加载当前路径的dll文件,不需要后缀
Assembly assembly = Assembly.Load("Ruanmou.DB.Sqlserver");
//2 获取类型 (获取类型信息的方式不止一个)
Type typeDBHelper = assembly.GetType("Ruanmou.DB.Sqlserver.DBHelper");
//3 创建对象
object oDBHelper = Activator.CreateInstance(typeDBHelper);
简单工厂
原理:把创建对象的代码转移到另一个类,好处就是逻辑独立
案例
public class SimpleFactory { //IDBHelper 配置文件里面的key private static string IDBHelperConfig = ConfigurationManager.AppSettings["IDBHelper"]; public static IDBHelper CreateDBHelper() { string dllName = IDBHelperConfig.Split(‘,‘)[1]; string className = IDBHelperConfig.Split(‘,‘)[0]; Assembly assembly = Assembly.Load(dllName); Type type = assembly.GetType(className); object oObject = Activator.CreateInstance(type); return (IDBHelper)oObject; } }
原文:https://www.cnblogs.com/shanshuiYiCheng/p/12568603.html