编程语言
首页 > 编程语言> > C#-重载导致代码膨胀

C#-重载导致代码膨胀

作者:互联网

我试图加深对OOP的了解,因此创建了一个主机冒险游戏.我有一个战斗课,基本上有3种方法:

public static void StartFight(Dragon dragonWarrior, Goblin goblinEnemy)
public static string YouAttack(Dragon dragonWarrior, Goblin goblinEnemy)
public static string EnemyAttack(Goblin goblinEnemy, Dragon dragonWarrior)

第一个呼叫其他2个,直到有人死亡. YouAttack和EnemyAttack包含以下消息:

Console.WriteLine("{0} the dragon attacks {1} and has dealt {2} damage",
                  dragonWarrior.Name, goblinEnemy.Name, damageDone);

总而言之,让我们说我的3种方法合起来需要90行代码.

我的问题是这个.可以说,我有一个兽人.我可以轻松地复制和粘贴方法并像这样重载它们:

public static void StartFight(Orc orcWarrior, Goblin goblinEnemy)

但这会产生很多膨胀.尤其是随着战士的数量增加(半人马,恶魔,矮人等)

那么有没有一种传递对象的方法,编译器可以确定传递了什么对象?如果有,有人知道好的教程吗?我可以研究另一种解决方案吗?

我知道这可能是一个垃圾问题,但我完全是自学成才.我没有任何朋友或老师的代码,所以每个问题都可能是一个难题.
先感谢您

解决方法:

您正在寻找的被称为继承(link)和多态性(link)-两者都是OOP的三大支柱之一(第三者是封装(link))

它们允许您使用您不知道确切类的对象,但仍可以对其描述API或方法.

可以在这里找到一些示例用法:What is the real significance(use) of polymorphism

在您的示例中,假设Dragon和Orc扩展了Warrior类,并说Goblin和Gnome扩展了Enemy类.然后您的方法将如下所示:

public static void StartFight(Warror warrior, Enemy enemy)
public static string YouAttack(Warror warrior, Enemy enemy)
public static string EnemyAttack(Enemy enemy, Warror warrior)

而且,您可以传递任何扩展Enemy或Warrior类的对象.

正如其他人提到的那样,该继承树只是一个示例,您可以(并且应该)根据您的需要(或多或少是抽象的)设计它.

标签:overloading,c
来源: https://codeday.me/bug/20191110/2015210.html