小编Dea*_*ust的帖子

C#List <baseClass> - 用于存储继承类的任何方法吗?

我正在尝试创建一个简单的"库存"项目,就像在任何RPG中一样.我有非常基本的类,它们都有属性.

无论如何,我有一个基类,item并从中继承weapon.item具有属性(名称,值,重量,"重要项目")也在其中使用weapon,但weapon具有额外的属性(攻击,防御,速度,手性).

我有以下代码(抱歉,如果可读性太可怕了):

static void Main(string[] args)
{   
     List<item> inventory = new List<item>();
     inventory.Add(new weapon("Souleater", 4000, 25.50f, false, 75, 30, 1.25f, 2));
                           //item--------------------------->  weapon--------->

     Console.Write("Name: {0}\nValue: {1}\nWeight: {2}\nDiscardable: {3}\nAttack: {4}\nDefense: {5}\nSpeed: {6}\nHandedness: {7}",
            inventory[0].Name, inventory[0].BValue, inventory[0].Weight, inventory[0].Discard, 
            inventory[0].Atk, inventory[0].Def, inventory[0].Speed, inventory[0].Hands);

     Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

基本上,我要做的是weapon在库存中添加一个新的,但库存是一种List<item>类型.我一时兴起,希望由于它的继承,它会被接受.它是,但weapon无法访问特定属性:

('shopSystem.item'不包含'Atk'的定义,也没有扩展方法'Atk'接受'shopSystem.item'类型的第一个参数可以找到)

那么,有什么方法可以达到我的目的吗?有一个"库存",它可以存储item对象,以及weapon,armour,accessory等对象,它继承item?还值得一提的是,如果我声明以下内容,我可以访问所有需要的属性:

weapon Foo = new weapon("Sword", 200, …
Run Code Online (Sandbox Code Playgroud)

c# inheritance list

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×1

inheritance ×1

list ×1