C# 笔记:类的继承与重写(第三次课)
子类继承父类的静态变量与父类共享
DerivedClass.stValue = 10;
BaseClass.stValue = 5;
Console.WriteLine(BaseClass.stValue); // 5
Console.WriteLine(DerivedClass.stValue); // 5
类内部 this and base 使用
调用构造函数时:不使用类名调用构造函数
- 使用 this(params..) 调用当前类的构造函数
- 使用 base(params..) 调用父类的构造函数
base 调用父类方法、属性
const 与 readonly 的区别
- readonly:可以写书任意变量,包括对象、结构体等
- const:只能修饰基本数据类型和字符串
类的继承
重载:(仅方法 + 属性,字段不可重载)
- new:直接为当前类创建新的方法、字段、属性,直接隐藏父类的任意同签名方法、属性(任意都可以,不需要关键词修饰)
理解:该类实例化的对象仍然包含有被隐藏的项,只是通过子类入口访问时隐藏,当通过父类进行访问时(使用父类指针指向该对象进行访问时、base)仍可以调用父类被隐藏的方法 - override:继承父类的同签名方法、属性,并重写该项,被重写的父类项必须有 virtual 或 abstract 字段修饰,override与 virtual 和 abstract 相伴出现!区别如下:
virtual:可以被子类重写(override),只能用于修饰方法或属性,且函数体不能为空!
abstract:必须被子类重写(override),能修饰方法或属性,且函数体一定为空!
类、抽象类、接口
-
类:
需要加访问控制关键字
需要添加“待重写”关键字且只能使用 virtual -
抽象类:
需要加访问控制关键字修饰
需要添加“待重写”关键字能使用virtual和abstract
在普通类的基础上可以使用abstract关键字 -
接口 interface:(仅方法 + 属性,字段不可重载)
不需要加访问控制修饰(都是public)
不需要添加虚函数(待重写)标志
所有没有函数体的方法、属性必须被子类重写
相当于自动为所有属性选择“待重写”标志(virtual、abstract,要求参上)