0

我有两个抽象类:

abstract class Item
{
        public string name { get; set; };
        public abstract Genre Genre { get; set; };
}
abstract class Genre
{
        public string name { get; set; };
}

还有他们的孩子

class weapon : Item
{
    public virtual GenreWeapon Genre { get; set; };
}

class armor: Item
{
    public virtual GenreArmor Genre { get; set; };
}

class GenreWeapon : Genre
{
    public int Damage { get; set; };
}

class GenreArmor : Genre
{
    public int DamageReduction { get; set; };
}

但我不知道该怎么做,我试试

public new virtual GenreWeapon Genre { get; set; };

但如果我有 Item.Genre 我会得到 NULL

我尝试覆盖,但 VS 说这是不可能的,因为它不是同一个类

我尝试了很多事情但不知道该怎么做

请帮助我,我疯了。

谢谢

一个小例子

商店包含很多商品,商品的价格取决于类型和质量

所以在商店里我有类似的东西

List<Item> listItem = new List<Item>();

foreach(Item i in listItem)
{
 int prix = i.Genre.Prix;
 String Quality = i.Quality;
 if(i is Weapon arme)
 {
   int dégats = arme.Genre.Dégats;
 }
   if(i is armor armor)
 {
   int resist = armor.Genre.Armor;
 }
}

这是一个简单的例子,也许不好^^我想在任何地方都没有演员得到武器的伤害所有物品的价格

并创造一种武器,我必须做

GenreWeapon sword = (get the GenreWeapon i need);

Weapon w = new Weapon{Genre = sword, name = "old sword of your granny" , quality = "bad"};

但我现在不知道如何处理 Item 和 int Weapon 中的 Genre 而不在代码中到处转换

4

1 回答 1

0

我不完全理解你想通过实现抽象类来实现什么。首先,看看虚拟类和抽象类之间的区别是什么。 虚拟方法和抽象方法之间的区别

此外,请查看显示如何使用代码的代码。

    public class Item
    {
        public string Name { get; set; }
        public Genre Genre { get; set; }
    }
    public class Genre
    {
        public string Name { get; set; }
    }

    public class Weapon : Item
    {
      // No code needed because everything is inherited from Item
    }


    static void Main(string[] args)
    {
        Genre Axe = new Genre() { Name = "Axe" };
        Weapon weapon = new Weapon() { Genre = Axe };
        Console.WriteLine(weapon.Genre.Name);

    }

如果您提供有关为什么需要抽象类的更多信息,我可能会提供帮助

于 2021-04-13T16:45:05.400 回答