面向对象语言三个基本特征
- 封装: 把客观物封装成类,并将类内部的实现隐藏,以保证数据完整性;
- 继承: 通过继承可以复用父类(基类)代码
- 多态: 允许将子类对象赋值给父类对象的能力
封装
- 封装是指把类内部的数据隐藏起来,不让对象实例直接操作,C#中提供了属性机制来对类内部的状态进行操作.
继承
- 一个类可以继承另一个类(密封类除外),子类将获得基类除构造函数额析构函数以外的所有成员.此外静态类是密封的,所也也不能被继承.
- 子类的初始化顺序
- 初始化类的实例字段
- 调用基类的构造函数,如果没有指明基类,则调用System.Object的构造函数
- 调用子类的构造函数
多态
- 使用
virtual
和override
关键字实现方法重写- 只有基类成员声明为
virtual
或abstract
时,才能被派生类重写;而如果子类想改变虚方法的实现行为,则必须使用override
关键字 - 使用
sealed
关键字可以阻止派生类重写虚成员 - 如果想在派生类中定义与基类成员同名的成员,则可以使用
new
关键字把基类成员隐藏起来
//基类 public class Horse :Animal { public void Eat() { Console.WriteLine("基类Eat"); } } //派生类 public class Horse :Animal { //使用new关键字把基类成员隐藏 public new void Eat() { Console.WriteLine("派生类Eat"); } }
- 只有基类成员声明为
所有类的父类
- 在C#中,所有的类都派生自
System.Object
类.如果定义的类没有指定任何基类,则编译器会自动将Object
类当作它的基类