我正在尝试创建一个简单的物品“库存”,就像在任何 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();
}
基本上,我想做的是weapon
向库存中添加一个新的,但库存是一种List<item>
类型。我一时兴起希望,由于它的继承,它会被接受。weapon
是的,但是无法访问特定于的属性:
(“shopSystem.item”不包含“Atk”的定义,并且找不到接受“shopSystem.item”类型的第一个参数的扩展方法“Atk”)
那么,有什么方法可以实现我在这里的意图吗?有一个可以存储item
对象的“库存”,以及weapon
,armour
等accessory
对象,这些对象继承自item
? 还值得一提的是,如果我声明以下内容,我可以访问所有所需的属性:
weapon Foo = new weapon("Sword", 200, 20.00f, false, 30, 20, 1.10f, 1);
非常感谢您的阅读。
这是item
和weapon
类,如果有人感兴趣的话:
class item
{
#region Region: Item Attributes
protected string name = "";
protected int baseValue = 0;
protected float weight = 0.00f;
protected bool noDiscard = false;
#endregion
public item(string n, int v, float w, bool nd){
name = n; baseValue = v; weight = w; noDiscard = nd;}
public string Name{
get{return name;}
set{if(value != ""){
name = value;}
}//end set
}
public int BValue{
get{return baseValue;}
}
public float Weight{
get{return weight;}
}
public bool Discard{
get{return noDiscard;}
}
}
class weapon : item
{
#region Region: Weapon Attributes
private int atk = 0;
private int def = 0;
private float speed = 0.00f;
private byte hands = 0;
#endregion
public weapon(string n, int v, float w, bool nd, int a, int d, float s, byte h) : base(n, v, w, nd){
atk = a; def =d; speed = s; hands = h;}
public int Atk{
get{return atk;}
}
public int Def{
get{return def;}
}
public float Speed{
get{return speed;}
}
public byte Hands{
get{return hands;}
}
}