C#核心语法复习—继承

2021/5/23 20:25:59

本文主要是介绍C#核心语法复习—继承,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

继承

(1)继承的基本概念

一个类A继承一个类B代表:

类A将继承类B的所有成员,A类将拥有B类的所有特征与行为。

被继承的类称为父类,基类。

继承的类被称为子类,派生类

子类可以有自己的特征和行为

特点:

1.单根性 子类只能有一个父类

2.传递性 子类可以间接继承父类的父类

(2)基本语法

 

(3)实例

class Teacher

{

public string name;

public int numbe

public void SpeakName()

{

Console.WriteLine(name);

}

}

 

 class TeachingTeacher:Teacher

{

public string subject;

public void SpeakSubject()

{

Console.WriteLine(subject+"老师");

}

}

class ChineseTeacher:TeachingTeacher

{

public void Skill()

{

Console.WriteLine("念诗");

}

}

***********************************************************

//使用1

TeachingTeacher tt=new TeachingTeacher(); 

tt.name="唐老师";

tt.number=1;

tt.SpeakName();//从父类继承过来的成员变量和方法

tt.subject="Unity";//自己的成员变量和方法

tt.SpeakSubject();

**************************************************************

//使用2:子类的子类

ChineseTeacher ct=new ChineseTeacher();

ct.name="唐老师";

ct.number=2;

ct.subject="语文";

ct.SpeakName();

ct.SpeakSubject();

ct.skill();

****************************************************************

(4)访问修饰符的影响

 

 //保护类型都是在继承的时候起作用

//如果一个成员变量,我们希望外部不访问它,但是希望它的子类可以访问它则使用protect类型。

(5)子类与父类的同名成员

//C#支持这么写,但是极其不推荐这么写。

********************************************************************

总结:

 

***********************************************************************

里氏替换原则

(1)基本概念

 

 (2)基本实现

Class GameObject

{

}

class Player:GameObject

{

public void PlayerAtk()

{

  Console.WriteLine("玩家攻击");

}

}

class Monster:GameObject

{

public  void MonsterAtk()

{

Console.WriteLine("怪物攻击");

}

}

class Boss:GameObject

{

public void BossAtk()

{

Console.WriteLine("Boss攻击");

}

}

***********************************************

实现:

//里氏替换原则体现:用父类容器装载子类对象

GameObject player =new Player();

GameObject monster =new Monster();

GameObject boss=new Boss();

GameObject[] objects=new GameObject[]{new Player(),new Monster,new Boss()};

//根据里氏替换原则,这样写都不会报错

*******************************************************************

//但是会出现一系列问题:

比如: player.  你会发现  .  不出内容,因为player是GameObject类型如何解决这一现象?

即:如何通过父类容器去实现子类独特的方法?

(3)is和as

*******************************************************

is:判断一个对象是否是指定类对象

返回值:bool 是为真,不是为假

用法:

if(player is Player)//判断变量player的类类型是不是Player类,如果是的话才进入括号内,如果不是则不进入

{

 

}

********************************************************

as:将一个对象转换成指定类对象

返回值:指定类型对象

成功返回指定类型对象,失败返回null、

用法:

Player p=player as Player;//这样就会返回一个为Player类型的变量,因为player本身作为GameObject类型的变量装载的就是Player类型的值,所以转成Player类型是合理的

如果写成:Player p= monster as Player;则转换失败,因为monster装载的是Monster的类型

返回失败就会返回null, 

 for(int i=0;i<objects.Length;i++)

{

if(objects[i] is Player)//虽然数组中的每个元素都是GameObject类型但是它装载的类型不同,is是判断其装载的类型。(重要,注意理解)

{

}

else if(objects[i] is Monster)

{

}

else if(objects[i] is Boss)

{

 

}

}

 ********************************************************

总结:

 

 *************************************************************

 继承中的构造函数

(1)知识回顾

 

 

 

 知识回顾(代码):

public Test (int i,string str):this(i)//这个this的意思是先执行只有一个参数的构造函数(上面那个Test(int i))

{

this.testStr=str;

}

 

 (1)继承中的构造函数 基本概念

特点:当声明一个子类对象时,先执行父类的构造函数,再执行子类的构造函数

注意:父类的构造函数很重要,子类可以通过base关键字代表父类,调用父类的构造

(2)继承中构造函数的执行顺序

父类的父类构造->。。。。父类构造->。。。。。子类的构造

 

 

 

 

 

 

 结构:

 

 (3)父类的无参构造很重要

 



这篇关于C#核心语法复习—继承的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程