继承
继承的类型
- 实现继承和接口继承
- 实现继承:表示一个类型派生与一个基类型,拥有该基类型的所有成员字段和函数
- 接口继承:表示一个类型只继承了函数的签名,没有继承任何代码
- 多重继承
- 一个类派生自多个类
实现继承
- 实现简单的继承
class student { public int age; public string name; } interface student1 { void test(); } class teacher : student, student1 { public void test() { Console.WriteLine("我是实现的接口"); } }
- 虚方法
- 把一个基类函数声明为 virtual ,就可以在任何派生类中重写该函数
class student { public int age; public string name; public virtual void test() { } } class teacher : student { public override void test() { } }
- 隐藏方法【不建议使用】
- 如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有分别声明为 virtual 和 override,派生类方法都会隐藏基类方法
class student { public int age; public string name; public void test() { } } class teacher : student { public new void test() { } }
- 调用函数的基类版本【base】
class student { public int age; public string name; public void test() { } } class teacher : student { public new void test() { base.age = 1; } }
- 抽象类和抽象函数【abstract】
- 抽象类不能实例化,抽象函数不能直接实现,必须在非抽象的派生类中重写
- 如果类包含抽象函数,则该类也是抽象的,也必须声明为抽象的
abstract class student { public int age; public string name; public abstract void test(); } class Teacher : student { public override void test() { } }
- 密封类和密封方法【sealed】
- 对于类来说,表示不能继承
- 对于方法来说,表示不能重写
- 派生类的构造函数
- 和Java差不多,先实例化父类再实例化子类
- C#中是不包含静态代码块和代码块的
- 修饰符
修饰符 | 应用于 | 说明 |
public | 所有类型或成员 | 所有代码均可以访问该项 |
protected | 类型和内嵌类型的所有成员 | 只有派生的类型能访问该项 |
internal | 所有类型或成员 | 只能在包含它的程序集中访问该项 |
private | 类型和内嵌类型的所有成员 | 只能在它所属的类型中访问该项 |
protected internal | 类型和内嵌类型的所有成员 | 只能在包含它的程序集中和派生类型的任何代码中访问该项 |
接口
interface Istudent { void test(); } class teach : Istudent { public void test() { } }
- 接口不能有构造函数,也不能有字段
- 接口定义中不允许声明关于成员的修饰符、接口成员总是公有的,不能声明为虚拟或者静态
定义和实现接口
- 接口的名字通常以I开头
- 如果一个类实现了接口,必须重写接口里面的方法
- 如果一个接口A实现了接口B,类C实现了接口A,则类C需要重写接口A和接口B的方法