我有以下3个类:
class Item
{
protected String itemType;
public String getItemType()
{
return itemType;
}
}
class Weapon:Item
{
private int power;
public int getPower()
{
return power;
}
}
class Armour:Item
{
private int defence;
public int getDefence()
{
return defence;
}
}
武器和盔甲继承物品的属性。
然后一个函数像这样。
public Item getItem()
{
return new Weapon();
}
我的问题是我需要做这样的事情,但它不起作用:
Item item1 = getItem();
if(item1.getItemType().Equals("weapon"))
lblText = item1.getPower();
else
lblText = item1.getDefence();
我显然收到错误消息,指出类 Item 没有像 getDefense() 或 getPower() 这样的函数。有谁知道我该如何做到这一点?
你不需要getItemType()
来完成你需要的东西。可以使用 C# is
运算符执行此操作。引用自 MSDN。
检查对象是否与给定类型兼容。例如, 以下代码可以确定对象是否是 MyObject 类型,或派生自 MyObject 的类型:
if (obj is MyObject)
{
}
您可以将代码更改为以下内容:
Item item1 = getItem();
if (item1 is Weapon)
{
lblText = ((Weapon)item1).getPower();
}
else if (item1 is Armour)
{
lblText = ((Armour)item1).getDefence();
}
此外,根据 C# 命名约定,您应该对方法名称使用驼峰大小写,而不是getDefence()
它应该是GetDefence()
。
为了实现所需的行为,您需要将类型为 Item
的 item1
对象分别转换为类型 Weapon
或 Armour
。
例如:
if(item1.getItemType().Equals("weapon"))
lblText = ((Weapon)item1).getPower();
else
lblText = ((Armour)item1).getDefence();
另外,请注意,如果item1
对象包含不等于"weapon"字符串的itemType
,则强制转换将在运行时引发异常。主要是因为getItem()
方法创建了一个类型为 Weapon
的对象。