【发布时间】:2021-03-29 03:31:03
【问题描述】:
我的自我结构化问题的架构
-英雄职业(字符串名称、int Health、int Gold)
-法师职业(字符串名称、int Health、int Gold、int Intelect)-每个法师都是英雄
-Archimage 类(字符串名称、int Health、int Gold、int Intelect、int SpellsCast)- 每个 Archimage 都是法师
-战士类(字符串名称,int Health,int Gold,int Strength)——每个战士都是英雄
-Champion class(字符串名称、int Health、int Gold、int Intelect、int DemonsSlain)- 每个冠军都是战士
现在让我感到困惑的部分是:我想实现继承自类树的两个分支的混合类。
-圣骑士职业(字符串名称、智力、智力、力量)——每个圣骑士都是法师和战士
-僧侣等级(字符串名称,智力,智力,力量,法术施法,恶魔杀手)——每个僧侣都是大形象和冠军。
让我们做两条对角线:
-BattleMage 类(字符串名称、int Health、int Gold、int Intelect、int Strength、int SpellsCast)- 每个 BattleMage 都是 Archimage 和 Warrior。
-SpellBreaker class(字符串名称、int Health、int Gold、int Intelect、int Strength、int DemonsSlain)- 每个 SpellBreaker 都是法师和冠军。
代码运行后一目了然。
namespace Heroes_Of_Inheritance_And_Polymorphism
{
class Program
{
static void Main(string[] args)
{
Hero Hero1 = new Hero("Arthur", 100, 50);
Hero1.ShowStatus();
Console.WriteLine("##########");
Mage Hero2 = new Mage("Arthur", 100, 50, 120);
Hero2.ShowStatus();
Console.WriteLine("##########");
Warrior Hero3 = new Warrior("Arthur", 100, 50, 120);
Hero3.ShowStatus();
Console.WriteLine("##########");
Archimage Hero4 = new Archimage("Arthur", 100, 50, 120, 1000);
Hero4.ShowStatus();
Console.WriteLine("##########");
Champion Hero5 = new Champion("Arthur", 100, 50, 120, 1000);
Hero5.ShowStatus();
}
}
public class Hero
{
public string Name;
public int Health;
public int Gold;
public Hero(string name, int health, int gold)
{
this.Name = name;
this.Health = health;
this.Gold = gold;
}
public virtual void ShowStatus()
{
Console.WriteLine($"I am a Hero called {Name}, with {Health} health and {Gold} gold pieces!");
}
}
public class Mage : Hero
{
int Intelect;
public Mage(string name, int health, int gold, int intelect) : base(name, health, gold)
{
this.Intelect = intelect;
}
public override void ShowStatus()
{
base.ShowStatus();
Console.WriteLine($"I, {Name}, have now become a Mage with {Intelect} intelect.");
}
}
public class Archimage : Mage
{
int SpellsCast;
public Archimage(string name, int health, int gold, int intelect, int spellscast) : base(name, health, gold, intelect)
{
this.SpellsCast = spellscast;
}
public override void ShowStatus()
{
base.ShowStatus();
Console.WriteLine($"I, {Name}, am a wise Archimage that has cast {SpellsCast} spells.");
}
}
public class Warrior : Hero
{
int Strength;
public Warrior(string name, int health, int gold, int strength) : base(name, health, gold)
{
this.Strength = strength;
}
public override void ShowStatus()
{
base.ShowStatus();
Console.WriteLine($"I, {Name}, have now become a Warrior with {Strength} strength.");
}
}
public class Champion : Warrior
{
int DemonsSlain;
public Champion(string name, int health, int gold, int strength, int demonsslain) : base(name, health, gold, strength)
{
this.DemonsSlain = demonsslain;
}
public override void ShowStatus()
{
base.ShowStatus();
Console.WriteLine($"I, {Name}, am a strong Champion that has slain {DemonsSlain} demons.");
}
}
}
到目前为止一切都很好,但是这个
public class Paladin : Warrior, Mage
{
public Paladin(string name, int health, int gold, int Intelect, int Strength)
: base(name, health, gold, strength)
{
}
}
显然行不通。
我觉得我应该使用接口。我不完全确定如何从单个接口中的多个类中提取所需的参数,在这种情况下重用它们的构造函数也让我大吃一惊。
欢迎任何指示、可行的解决方案、批评或完全不同的方法!
最好的问候! ^^
【问题讨论】:
-
hmm 但是你的类(战士等)不应该有不同的类......它应该是 1 个存储值的类......你应该为给定的类 fx 分配这个类的实例类
ClassStats枚举Classes然后Dictionary<ClassesEnum, ClassStats>... 然后Player类将具有fxList<ClassesEnum> SelectedClasses属性 -
你不能在 C# 中进行多重继承,这是一件好事!您可能应该重新架构一下。例如,有一个
Ability(或其他)对象的集合,您可以将它们提供给每个类。 -
值得一读this。
标签: c# oop inheritance polymorphism multiple-inheritance