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:只能修饰基本数据类型和字符串

类的继承

重载:(仅方法 + 属性,字段不可重载)

  1. new:直接为当前类创建新的方法、字段、属性,直接隐藏父类的任意同签名方法、属性(任意都可以,不需要关键词修饰)
    理解:该类实例化的对象仍然包含有被隐藏的项,只是通过子类入口访问时隐藏,当通过父类进行访问时(使用父类指针指向该对象进行访问时、base)仍可以调用父类被隐藏的方法
  2. override:继承父类的同签名方法、属性,并重写该项,被重写的父类项必须有 virtual 或 abstract 字段修饰,override与 virtual 和 abstract 相伴出现!区别如下:
    virtual:可以被子类重写(override),只能用于修饰方法或属性,且函数体不能为空
    abstract:必须被子类重写(override),能修饰方法或属性,且函数体一定为空

类、抽象类、接口

  1. 类:
    需要加访问控制关键字
    需要添加“待重写”关键字且只能使用 virtual

  2. 抽象类:
    需要加访问控制关键字修饰
    需要添加“待重写”关键字能使用virtual和abstract
    在普通类的基础上可以使用abstract关键字

  3. 接口 interface:(仅方法 + 属性,字段不可重载)
    不需要加访问控制修饰(都是public)
    不需要添加虚函数(待重写)标志
    所有没有函数体的方法、属性必须被子类重写
    相当于自动为所有属性选择“待重写”标志(virtual、abstract,要求参上)