一、抽象类
- 抽象类用来列举一个类所需要的行为,但不去具体实现
- 必须由子类实现抽象类的方法
- 抽象方法只指明方法的返回值类型,方法名和参数,但不提供方法的实现
- 有抽象方法的类必须定义为抽象类
- 子类使用override关键字重写父类的抽象方法
- 如果子类没有实现父类的抽象的方法,那么子类也必须是抽象的
- 抽象类使用abstract关键字修饰
二、接口(interface)
- 语法:
[属性][访问修饰符] interface 接口名
{
//接口主体
} - 接口只能声明方法、属性、索引器和事件
- 接口中不能声明字段、构造方法、常量和委托
- 接口的成员默认是public ,如果明确指定访问级别会报编译错误
- 接口的所有方法属性、方法和索引器都必须没有实现
- C#中的接口需要以“I”开头
- 多重接口的实现(合并接口)
继承合并接口需要实现被合并的所有接口的方法 - 继承基类并实现接口
注意:如果一个类继承基类,必须先写继承的类再写接口
三、抽象类和接口的区别:
相同点:
- 都不能被实例化
- 都包含有未实现的方法
- 子类必须实现所有未实现的方法
不同点:
- 接口的子类可以实现多个接口,抽象类的子类只能继承一个抽象类
- 接口可以直接实现方法,抽象类需要使用override关键字
- 接口用interface关键字,抽象类用abstract关键字
四、is和as关键字
- is:测试一个实例是不是另外一种类型(返回值为true或false)
- as:as在测试一个实例是不是另外一种类型的同时,如果是则转为另外一种类型,如果不是返回null