-
值类型
-
简单类型:int float 等
-
结构体
-
枚举类型
-
存储在栈中,自动释放,效率较高
-
不能派生,不支持多态
-
适合做存储数据的载体
-
-
引用类型
- 定义的类
- string类型
- object类
- 数组
- 存储在堆中,需要手动释放
- 可以派生,支持多态
- 适合定义应用程序的行为
- 对象池技术
-
装箱和拆箱
- 装箱——值类型转换为引用类型
- 拆箱——引用类型转换为值类型
-
泛型
- 泛型T struct 约束传入的参数为值类型,而class约束为引用类型
-
委托
- 委托能够存储具有相同参数的方法,存储的是方法
- 我的理解,委托就是一个秘书(声明、初始化),他掌握了所有的方法(得定义哈,根据需求,定义相同参数的方法),我要干什么,我直接找我的秘书,秘书就会根据我的需求,调用对应的方法。比如我要去北京,他知道去北京的方法有:飞机、动车、汽车、骑行等,我告诉他我坐飞机过去,那么他就会(注册)飞机这个方法,然后我用他给的方法去就行了(调用)
- 常见的委托:
- delegate
- 声明 public delegate void DelegateTest();
- 初始化 public static DelegateTest dt;
- 注册事件 dt+=methodA;
- 调用委托 dt();
- Action事件
- 实例化 public static Action<string> _action();
- 注册 _action+= methodA;
- 调用 _action?.Invoke();
- 区别:不能有返回值
- Func事件
- 实例化,必须有返回值 public Func<string,string,int> _func1;
- 注册 _func1+=MethodC;
- 调用 var res= _func1?.Invoke("12","23");
- 区别:必须有返回值
- delegate
-
抽象类和接口
- 功能对比
接口 | 抽象类 | |
---|---|---|
定义 | 功能的抽象,一种行为规范,如吃、喝、飞行等 | 是对事物共性的描述,比如人、动物 |
区别 | 子类必须实现所有声名的方法 | 子类必须实现所有抽象方法,普通方法可以不实现 |
可以多继承 | 只能单继承 | |
不能包含成员变量和构造函数 | 可包含成员变量和构造函数 | |
默认public修饰 | 可以由其他修饰符修饰 | |
包含:属性、索引器、事件、方法 | 包含:抽象方法和普通方法及其他类的共性 | |
共同点 | 都可以被继承 | |
都不能被直接实例化 | ||
都包含方法的声明 |