[英]How do I call a function from an Child unknown child class?
我有以下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沒有像getDefence()或getPower()這樣的函數。 有誰知道我能做到這一點?
為了實現所需的行為,您需要將Item
類型的item1
對象分別轉換為Weapon
或Armour
類型。
例如:
if(item1.getItemType().Equals("weapon"))
lblText = ((Weapon)item1).getPower();
else
lblText = ((Armour)item1).getDefence();
另外,請注意,如果您的item1
對象包含的itemType
不等於“武器”字符串,則轉換將在運行時引發異常。 主要是因為getItem()
方法創建了Weapon
類型的對象。
您不需要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()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.