接口 interface
接口里面规定了一些规则、方法,但是接口不提供默认实现。(C#3.0之后,接口内也可以提供默认实现)
继承某个接口的话就要实现该接口里的所有方法。
继承 :
类的定义处,用冒号加父类的形式表示类的继承。子类可以使用父类里面的非private标记的方法和属性,也可以重写父类带override/virtual或父类所继承的接口的方法。
子类可以拥有只属于自己(不属于父类)的方法和属性。静态类或者静态成员无法继承或重写。
eg. ChildClassName : ParentClassName
多态
子类可以隐式转换成父类,由子类变换得到的父类可以显式重新转换为对应的子类。子类转换为父类后,子类原有属性和方法不会丢失,只是无法访问。
重写 overwrite
子类想要重新实现一个父类里面已经实现了的方法,就用overwrite一个同名方法,然后在{ }里面实现,如果需要调用父类中被override的方法,需要用"base.方法名"。
虚方法 virtual
类对于有virtual方法提供默认的实现,并且允许子类重写。(有点类似于上文已经提供了默认实现的接口)
换句话说,父类中的虚方法一定要有默认实现,子类可以选择是否重写。
抽象方法&抽象类 abstract
当你不想实现某些方法的时候可以用abstract把方法设置为抽象方法,同时要把该方法所在的类设置为抽象类(因为抽象方法必须存在于抽象类中)。
那么抽象类中有两种成员:已经实现了的方法等成员、没有实现的方法(即抽象方法)。
所以抽象类不能实例化。
抽象类本身不可以实例化,只能通过某个继承该抽象类的非抽象子类来实例化,再隐式转化成该抽象类,该抽象类才得以运用。
密封类 sealed
如果不想自己写的类被别人继承,就用sealed规定成密封类。
C#五个修饰符的权限
修饰符 级别 适用成员 解释
public 公开 类和类成员 对访问成员没有级别限制
private 私有 类成员 只能在类的内部访问
protected 受保护的 类成员 在类的内部或者在派生类中访问,不管该类和派生类是不是在同一程序集中
internal 内部的 类和类成员 只能在同一程序集(Assembly)中访问,类默认是internal
protected internal 受保护的内部 类成员 如果是继承关系,不管是不是在同一程序集中都可以访问;如果不是继承关系只能在同一程序集中访问
C#权限的详细介绍可以看:https://www.cnblogs.com/lip-blog/p/11844228.html