簡體   English   中英

我該如何從不知名的Child子類中調用函數?

[英]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對象分別轉換為WeaponArmour類型。

例如:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM