2023-09-19
自我提升
0

目录

继承的类型
实现继承
this和base关键字

继承是什么?
在上⼀节课中学习了如何定义类,⽤类当做模板来声明我们的数据。
很多类中有相似的数据,⽐如在⼀个游戏中,有Boss类,⼩怪类Enemy,这些类他们有 很多相同的属性,也有不同的,这个时候我们可以使⽤继承来让这两个类继承⾃同⼀个类

继承的类型

实现继承:

表⽰⼀个类型派⽣于⼀个基类型,它拥有该基类型的所有成员字段和函数。 在实现继承中,派⽣类型采⽤基类型的每个函数的实现代码,除⾮在派⽣类型的定义中指定重写某个函数的实现代码。 在需要给现有的类型添加功能,或许多相关的类型共享⼀组重要的公共功能时,这种类型的继承⾮常有⽤。

接⼝继承:

表⽰⼀个类型只继承了函数的签名,没有继承任何实现代码。 在需要指定该类型具有某些可⽤的特性时,最好使⽤这种类型的继承。

多重继承

⼀些语⾔(C++)⽀持所谓的 “多重继承”,即⼀个类派⽣⾃多个类。
使⽤多重继承的优点是有争议的:

  1. 可以使⽤多重继承编写⾮常复杂、但很紧凑的代码。
  2. 使⽤多重实现继承的代码常常很难理解和调试。

如前所述,简化健壮代码的编写⼯作是开发 C#的重要设计⽬标。因此,C#不⽀持多重实现继承。 ⽽ C#允许类型派⽣⾃多个接口— — 多重接⼝继承。 这说明,C#类可以派⽣⾃另⼀个类和任意多个接⼝。
更准确地说, System.Object 是⼀个公共的基类,所以每个C#(除了Object类之外)都有⼀个基类,还可以有任意多个基接⼝。

实现继承

如果要声明派⽣⾃另⼀个类的⼀个类,就可以使⽤下⾯的语法:

c#
class MyDerivedClass : MyBaseclass { // functions and data members here }

如果类(或 结构)也 派⽣ ⾃ 接⼝,则⽤逗号分隔列表中的基类和接口:

c#
public class MyDerivedClass: MyBaseClass , IInterface1 , IInterface2 { // etc. }** **
c#
//基类 BaseClass.cs class BaseClass { public int data1; public string data2; public void Function1() { Console.WriteLine("BaseClass:Function1"); } public void Function2() { Console.WriteLine("BaseClass:Function2"); } }
c#
//派生类 DrivedClass1.cs class DrivedClass1:BaseClass { public int data3; public void FunctionDrivedClass1() { Console.WriteLine("FunctionDrivedClass1"); } }
c#
//使用 Program.cs BaseClass bc = new BaseClass(); bc.Function1(); bc.Function2(); DrivedClass1 dc1 = new DrivedClass1(); dc1.Function1(); dc1.Function2();

案例实现

基类敌⼈类( hp speed ⽅法 ai move )

c#
//新建基类 Enemy.cs class Enemy { protected int hp;// private protected public protected int speed; public void AI() { Console.WriteLine("AI"); } public void Move() { Console.WriteLine("Move"); } }

派⽣出来两个类

  • boss类
  • type1enemy类
  • type2enemy类
c#
//新建类 boss.cs class Boss:Enemy { private int attack; private int hp; public Boss(int attack,int hp,int speed) { this.attack = attack; base.hp = hp; base.speed = speed; } public void Skill() { Console.WriteLine("Boss Skill"); } public void Print() { Console.WriteLine("HP:" + hp); Console.WriteLine("Base.HP:" + base.hp); Console.WriteLine("Speed:" + speed); Console.WriteLine("Attack:" + attack); } }
c#
//新建类 Type1Enemy.cs class Type1Enemy:Enemy { }
c#
//新建类 Type2Enemy.cs class Type2Enemy:Enemy { }
c#
//使用 Program.cs Boss boss1 = new Boss(100,100000,20); boss1.Print();

this和base关键字

this(base)作⽤:

  • IDE给提⽰
  • 区分局部变量和字段

this可以访问当前类中定义的字段,属性和⽅法,有没有this都可以访问,有this以让IDE VS编译器给出提⽰,另外当⽅法的参数跟字段重名的时候,使⽤this可以表明访问的是类中的字段,base只可以调⽤⽗类中的公有⽅法和字段,有没有base都可以访问,但是加上base.IED⼯具会给出提⽰,把所有可以调⽤的字段和⽅法罗列出来⽅便选择