微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#继承了具有强制类型转换的抽象类的类

如何解决C#继承了具有强制类型转换的抽象类的类

我有两个抽象类:

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 而不会在代码中的任何地方进行转换

解决方法

我不完全理解你想通过实现抽象类来实现什么。 首先,看一下虚拟类和抽象类之间的区别。 Difference between virtual and abstract methods

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

    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);

    }

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。