继承是面向对象编程的一个重要特性。任何类均可以从另外一个类中继承,这就是说,这个类拥有它继承的类的全部成员。在OOP 中,被继承的类称为父类(也称为基类)。注意,C#中的对象仅能直接派生于一个基类,固然基类也能够有本身的基类。编程
类的继承一个重要做用是子类可重用父类的代码。这样就能够在一个地方集中维护一份代码,避免了不少的重复的代码。好比咱们已经有一个Car类。在这个Car中有两个最基本的方法启动发动机和中止发动机 (1)startEngine();(2)StopEngine();微信
class Car { public int StartEngine() { //启动发动机的代码 return 0; } public int StopEngine() { //中止发动机的代码 return 0; } }
这时候咱们的系统须要有两个新类,ModelACar和ModelBCar。它们都须要一样的启动发动机和中止发动机功能。除此以外,每一个类还都有本身特殊的功能。若是没有继承,咱们怎么办呢?很简单啊,把Car类中的这两个方法copy过来就能够了。学习
class ModelACar { public int StartEngine() { //启动发动机的代码 return 0; } public int StopEngine() { //中止发动机的代码 return 0; } public void ModelAFucntion1() { } public void ModelAFucntion2() { } } class ModelBCar { public int StartEngine() { //启动发动机的代码 return 0; } public int StopEngine() { //中止发动机的代码 return 0; } public void ModelBFucntion1() { } public void ModelBFucntion2() { } }
如今问题就来了,若是有十种新的类都须要Car类中一样的启动和中止发动机的方法,那你怎么办?在十个类中都copy一样的代码吗?能够。可是很烦啊。尤为是之后修改维护的时候,更烦。少改了一个地方,就会出问题。因此继承就是来帮咱们解决这样的问题。咱们只须要新的类继承Car类就能够了。新的类自动就有了Car类的所有方法。spa
继承的语法和简单。code
class 子类的名字 : 父类的名字 { }
使用继承后,ModelACar和ModelBCar的代码变成这样了。对象
class ModelACar : Car { public void ModelAFucntion1() { } public void ModelAFucntion2() { } } class ModelBCar : Car { public void ModelBFucntion1() { } public void ModelBFucntion2() { } }
可是咱们一样能够在ModelACar和ModelBCar 中访问StartEngine和StopEngine方法。blog
在继承一个父类时,成员的可访问性就成了一个重要的问题。子类不能访问父类的私有成员,但能够访问其公共成员。不过,子类和外部的代码均可以访问公共成员。这就是说,只使用这两个可访问性,不能让一个成员可由父类类和子类访问,而不能由外部的代码访问。继承
为了解决这个问题,C#提供了第三种可访问性:protected,只有子类才能访问父类的protected 成员。对于外部代码来讲,这个可访问性与私有成员同样:外部代码不能访问private 成员和protected 成员。教程
来开一个具体的例子吧。你建立一个项目。解决方案名称为Sloution24,项目名称为Exercise24,项目类型为控制台程序。ci
新建三个类文件,名称分别为Car,ModelACar,ModelBCar。
点击Car.cs。修改代码以下。
点击ModelACar.cs。修改代码以下。
点击ModelBCar.cs。修改代码以下。
点击Program.cs。修改代码以下。
运行结果
1. 读懂这段代码,为每条语句加上注释,解释它的功能。
2. 新建一个ModelCCar类,让它继承Car类。在main方法中新建一个ModelCCar类的对象,调用startEngine和StopEngine方法。
3. 修改Car类的StartEngine和StopEngine方法。例如多输出几行字符。运行程序,看看对ModelACar和ModelBCar调用StartEngine和StopEngine方法有影响吗?
4. 修改Car类的字段和方法的public访问限制符为private。运行程序,看看是什么结果?解释一下缘由是什么?
5. 在main方法中能够调用Car类的TestEngine方法吗?为何?怎样修改才能调用?
6. 新建一个ModelDCar类,让它继承ModelACar类。在main方法中新建一个ModelDCar类的对象,看看都能调用什么方法。分别调用一些试试看。
付费解答C#入门学习过程当中碰到的各类问题。
零基础学习C#入门,大多数的问题均可以经过自学或借助互联网解决。
可是仍是会有一些问题,不是那么容易解决,成为了你学习的绊脚石。最后甚至形成你学习的半途而废。一般学习C#编程入门,你会遇到20到30多个你不能很容易解决的问题。
这个时候,你最须要什么呢?
对!一个专业的老师给你帮助!
你在学习本课程中,遇到任何问题均可以经过qq或email想本教程做者进行求助。
只需30元,你就能够获得本教程做者的三次专业解答。因此你只需不到300元就能够顺利的完成C#入门,今后推开软件行业的大门。
付费方式很是简单:
用微信扫描下面的二维码。在付款留言中留下你的qq号或email地址就能够啦。
教育不是要便宜,而是要可靠!真正聪明的人,更懂得花钱让专业的人为本身服务,提升本身的效率。
老师qq:2040227296
老师email:2040227296@qq.com