C#核心(18)面向对象多态vob
前言
我们在先前已经完成封装和继承的知识点,已经掌握了三分之二的核心知识点,那么最后一块,多态,也是相当重要,在实际开发中使用比较多的东西。
在学习继承的时候,不知道你会不会有这么一个想法,当我和我的兄弟都有父类的同一个方法但是其中略有不同的时候,我们应该怎么办?是在子类里重新开一个函数吗?这显然不科学。
于是语言设计者为我们提供了更好的方法,就是多态的设计。
概念
让继承同种父类的子类们,在执行相同方法行为有不同的表现。
打个比方,我这里有一个人物基础的父类,继承他的有敌人和npc两个子类。
其中父类有一个方法叫做巡逻,这点不难理解吧。
npc和敌人都要巡逻,但是很明显,npc巡逻只是固定路线来回移动,偶尔说两句话,但敌人就不一样了,他看到玩家会进入追击或者什么的。
那么这时候多态就可以帮助我们在两个子类中分别实现巡逻的方法。
多态的实现
- 编译时的多态:函数重载
- 运行时的多态(vob,抽象函数,接口)
vob的解释
v:virtual(虚函数)——>可以被子类重写
o: override(重写)——>重写虚函数
b:base(父类)——>保留父类行为 base.函数名
实例
我们定义了一个基类GameCharacter
,其中包含一个virtual方法Attack()
。然后我们创建了一个子类PlayerCharacter
和EnemyCharacter
,其中PlayerCharacter
类通过override关键字重写了基类的Attack()
方法,并在方法内部调用了基类的Attack方法,而EnemyCharacter
类未重写Attack()
方法,因此将使用基类的实现。
在Game
类的Main
方法中,我们创建了一个PlayerCharacter
对象和一个EnemyCharacter
对象,并分别调用它们的Attack()
方法。从输出结果可以看到,PlayerCharacter
的Attack()
方法先输出了"玩家攻击",然后调用了基类的Attack()
方法,而EnemyCharacter
只调用了基类的Attack()
方法。
using System;
public class GameCharacter
{
public virtual void Attack()
{
Console.WriteLine("基础攻击");
}
}
public class PlayerCharacter : GameCharacter
{
public override void Attack()
{
Console.WriteLine("玩家攻击");
base.Attack(); // 调用基类的Attack方法
}
}
public class EnemyCharacter : GameCharacter
{
// EnemyCharacter类未重写Attack方法,将使用基类的实现
}
public class Game
{
public static void Main(string[] args)
{
GameCharacter player = new PlayerCharacter();
player.Attack();
Console.WriteLine();
GameCharacter enemy = new EnemyCharacter();
enemy.Attack();
}
}
总结
今天我们简单了解了vob及其使用,也明白了大概使用的场景,希望对你日后的游戏编程有所帮助。当然前面的知识也很重要,希望你在学习中也要学会总结回顾。
如果你有什么忘记的,建议重新回去翻翻,这些东西都是基础中的基础,希望你能牢牢掌握。
还是那句话,学习路上,脚踏实地。
请期待我的下一篇博客!
我来自佑梦游戏开发,感谢你的关注和收藏!