如何解决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 举报,一经查实,本站将立刻删除。