9.里氏转换原则
子类可以直接赋值给父类
Mysub m =new Mysub();
Mybase mb =m;
10.this
this 表当前类的对象(区分重名)
this 是否写过,系统都会添加,这样可以通过反编译工具查看;
11.多态
一个调用,多种实现
12.as
子类 z = f as 子类;
13.抽象类和抽象方法
抽象方法不需要实现;
抽象方法必须在抽象类中;
抽象方法就是为了实现多态的,所以子类必须重写父类中的抽象方法;
如果子类也是抽象的,就可以不重写;
抽象类是对一类事物的抽象;
抽象类中可以存在抽象成员和非抽象成员;非抽象成员:方法、属性(、索引、事件声明);抽象成员就是普通的成员;
抽象类不能实例化,就是用来被继承的,以实现多态的;
14.抽象属性
抽象与自动属性很像,但是本质不同
-> 自动属性,后台会有一个字段生成,体统会自动的添加对应的方法体
-> 抽象属性,是因为没有方法体,所以get,set中什么都没有
结果
-> 自动属性,get,set共存
-> 抽象属性是可以有:只读、只写、可读可写之分的
15.实例成员
属于实例本身(可以实例多个对象,每个对象都属于各自的对象)
静态成员:通过类名.成员名的方式使用的(静态成员不需要实例,所以静态成员属于该类的所有对象)
静态字段赋初值时候只执行一次
静态属性:只不过加了一个static关键字(Math.Pow(r,2) r的平方)
啥时候用静态和非静态?
1) 静态方法中不能调用非静态成员
2) 每new一个实例成员都会开辟一段内存空间存放数据
3)静态成员只在一个固定的内存区域
4) 静态字段有静态构造函数为其赋值
语法只有一个:
static 类名()//系统可以自动生成
{
//初始化静态字段
}
静态构造方法不能被调用
16.接口
四个成员:方法、事件、索引、属性;
接口描述能力的!而抽象类是抽象的事物!
接口里面的细节,如下:
1)接口可以多继承(多个父类,也就是多个接口)
2)继承接口,叫做实现接口;如果实现接口,就必须实现所有方法,除非子类也是抽象类 ,所以在方法前要加上abstract
3)可以把接口当做零件
4)成员不能有使用访问修饰符(任何访问修饰符都不可用)
public interface IIterface//接口属性的定义
{
public int num
{
get;
set;
}
}
17.装箱和拆箱
值类型到引用类型装箱,从箱子里面拿出数据叫拆箱;
18.托管程序
dotnet应用程序称为托管的应用程序,由CLR管理的程序,被称为托管程序;
垃圾回收算法(压缩算法)每一代满了之后回收
19.密封类(sealed)
不允许继承的类
放在可以重写的方法前,不允许下一个子类重写