静态方法
特点:生命周期长,一旦创建;应用结束时才会结束,全局,效率高。
用处:用户登录信息,系统配置信息,系统设置,SQLHelper
注意:静态的东西创建多了占用内存会很大,不是必要的情况不要创建静态的对象。
调用:静态方法内调用非静态方法,不能直接调用。
析构方法
作用:释放对象
谁在使用:GC垃圾回收器在调用。
垃圾回收机制:
回收非托管资源---Windows窗口句柄、数据库链接、GDI对象、独占文件锁等等对象。
Dispose()需要实现IDisposeable接口。
Close()和Dispose()区别close()方法关闭对象,没有完全释放,Dispose()方法完全释放了。
抽象方法
注意:一定要写在抽象类里面,而且不能new 不能带方法体。
使用场合:强制性一定要实现。
与接口区别使用场合
区别:抽象类只能单继承,而接口能实现多继承。
抽象类里可以写普通方法,虚方法等,接口只能写规范,不写实现。
使用场合:抽象类一般常用于不会经常改动,然后抽象范围大一些的事件
接口适用于经常修改,知识一个规范的地方。
扩展方法
扩展方法ExtendMethod:
定义:在静态类中定义静态的扩展方法。
使用:调用密封类中的对象,属性或者方法。(扩展密封类)
扩展接口
Public static void 方法名(this 用密封类创建的对象){}
泛型
泛型的最大优点就是做到了通用。
可以传入多个参数。
object类型做数据转换时有拆装箱操作有性能消耗,建议少用。类型不安全。
泛型可以规定传什么类型的数据
字典
泛型 Dictionary<k,v>泛型字典 键值对
Key不能重复
自定义泛型
class MyGeneric<T>
{
private T ts;
public MyGeneric(T a)
{
this.ts = a;
}
}
泛型方法
Public void Show<T>(T t)
{
};
泛型约束
Public void Show<T>(T t)where T:new()//约束--表示T类型只接收一个无参构造函数new T()。
{
};
Struct 值类型约束
Class 引用类型约束(基类约束)只能有一个而且要放前面,接口约束可以多个。
自定义类型约束
值类型--结构类型struct/int/double/bool/枚举
引用类型 数组、类、接口、委托、object、字符串
自定义类型(自己创建的类)
泛型协变逆变
out只能是返回值,in只能是参数
什么情况下使用,在知道自己或者别人以后有用到父类通过子类实例化,或者子类通过父类实例化的情况下可以加上out或者in关键字.
People people = new People();
People people1 = new Teacher();
Teacher teacher = new Teacher();
//Teacher teacher1 = new People();
List<People> peoples = new List<People>();
从现实中理解下列语句应该正确,但是从类型方面理解List<People>和List<Teacher>并不属于同一类。
原因是语法规则不支持 .net 2.0 ,3.0的时候才有协变和逆变
协变和你便是针对泛型接口和泛型委托来说的,离开他们就没有这个说法。
Out关键字代表的是协变,in代表的是协变
//List<People> peoples1 = new List<Teacher>();
Default关键字 return default;如果是值类型默认返回0是引用类型默认返回null
逆变:
in修饰,逆变后,T只能作为参数 不能做返回值
Interface IListN<in T>
{
//T GetT();
Void show(T t);
}
Class ListIN<T>:IListN<T>
{
Public void Show(T t)
{
}
}
协变:
协变只能返回结果,不能做参数
Interface IListN<in T>
{
T GetT();
// Void show(T t);
}
Class ListIN<T>:IListN<T>
{
Public void Show(T t)
{
}
}
泛型总结
泛型的用处 让泛型类,泛型方法,泛型接口,泛型委托,更通用。
反射
exe /dll主要区别是exe文件有入口,metadata(元数据:描述exe/dll文件的一个数据清单)
反射(Reflection)用来操作获取元数据(metadata)
- 更新程序时(替换dll文件)(更新自己的dll文件)
- 使用别人的Dll文件(这种可以读取别人的私有的东西)
反射:一个操作元数据metadata 的一个类库(可以把反射当成一个小工具用来读取或者操作元数据)
操作dll文件里的类、方法、特性、属性字段
使用原因:因为我们需要动态读取私有的对象。
使用的地方:asp.net MVC ---ORM--LOC--AOP几乎所有的框架都会使用反射。
反射--反射工具--操作元数据metadata的工具。