静态方法:
1、特点
1)生命周期——一旦创建--应用结束 才会结束
2)全局可用
3)效率高
2、用处
用户登录信息、系统配置信息、系统设置、SQLhelper
注意:静态的东西创建多了占用内存多,非必要情况不要创建静态对象
3、调用
静态方法不能直接调用非静态方法,需先初始化所在类。
class TestStaticMethod
{
public stirng Test
{
return "我是非静态放法";
}
}
调用
|
|
|
TestStaticMethod test = new TestStaticMethod();
test.Test();
构造方法:
1、用处
初始化对象,或者初始化一些数据
2、特点
默认有一个无参构造方法,可以多个并重载
析构方法:
1、作用
释放对象
2、谁在使用
GC垃圾回收器在调用
虚方法(virtual)
1、作用
允许子类/派生类进行重写,实现不一样的功能
2、特点
好维护
抽象方法:
1、定义
一定写在抽象类中,不能new,不带方法体
2、使用场合
强制性一定要实现
抽象类和接口的区别:
抽象类 | 接口 |
单继承 | 多继承 |
里可以写普通方法、虚方法等 | 只能写规范,不写实现 |
常用在不会经常改动的地方 | 经常修改的地方 |
扩展方法(ExtendMethod)
1)在密封类中的对象、属性或者方法(扩展密封类)
2)扩展接口
3)在linq链式编程
泛型
最大的优点是做到了通用
List<string> strList = new List<string>(){"a","b","d"};
List<object> obList = new List<object>(){};//object类型做数据转换的时候有拆箱装箱操作,有性能损耗,建议少使用。
泛型Dictionary<K,V> 键值对(泛型字典)
Dictionary<int,string> dic = new Dictionary<int,string>();
实例化对象:
MyGeneric<int> myGeneric new MyGeneric(1111);
1、泛型原理:
interface IStudent<T>//泛型接口
{
}
interface IStudent//普通接口
{
}
2、类型约束:
【1】new()约束——表示T类型只接收一个无参数的构造函数new T()
【2】struct值类型约束
【3】class引用类型约束
【4】自定义类型约束
3、值类型和引用类型
值类型:结构类型struct\int、double、bool、枚举类型
引用类型:数组、类、接口、委托、object、字符串
new()约束一定要写在最后
4、泛型总结
1)泛型的用处:让泛型类、泛型方法、泛型接口、泛型委托更通用
2)次要:约束用的不多
3)了解:协变\逆变
exe\dll主要区别:exe文件有入口
metadata(元数据:用来描述exe\dll文件的一个数据清单)
5、协变和逆变
是针对接口和泛型委托来说的
协变关键字是out,只能是返回值
逆变关键字是in,只能是参数
default关键字值类型时默认返回0,引用类型时默认返回值为null。
IListOut<People> listOut = new IListOut<People>();
IListOut<People> listOut = new IListOut<Teacher>();//协变
IListIn<Teacher> listIn = new IListIn<Teacher>();
IListIn<Teacher> listIn = new IListIn<People>();//逆变
in修饰,逆变后,T只能作为参数,不能作返回值。
反射(Reflection)
用来操作获取元数据的
【1】更新程序时(更新自己的DLL)
【2】使用别人的DLL文件(这种可以读取别人私有的东西)
1、什么是反射?
操作metadata的一个类库(可以把反射当成一个小工具用来读取或获取元数据的)
(类、方法、特性、属性字段)
2、哪些用到了反射?
asp.net MVC---ORM---LOC---AOP
几乎所有的框架都用到了反射
为什么要通过反射间接去操作,因为1、需要动态2、读取私有的对象
通过反射加载DLL文件