gpt4 book ai didi

c# - 通过字典访问子对象的方法

转载 作者:行者123 更新时间:2023-11-30 20:40:42 26 4
gpt4 key购买 nike

新程序员,使用 C# 和 VB 2015,第一次发帖,所以请温柔!

基本上我是第一次使用 Dictionary,我试图访问我的 MedPack 类中的方法 useMedPack(),它是 Item 的子项,在将它添加到我的 Dictionary 时创建。问题是它说:

****编辑**** 我觉得我应该在第一轮添加 Item 类(现在添加到底部)。根据一些很棒的建议,我使用 ((MedPack)inventory["MedPack"]).useMedPack();现在它按预期工作了!虽然有些反馈很好,我从大家的建议中学到了很多! :)

'Item' does not contain a definition for useMedPack();.

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Dictionary<String, Item> inventory = new Dictionary<String, Item>();

inventory.Add("MedPack", new MedPack("MedPack", 1));

MedPack.pickUpMedPack(inventory);

//THIS IS THE PROBLEM inventory["MedPack"].useMedPack();

Console.WriteLine("Press any key to exit");
Console.ReadKey();

}
}
}

namespace ConsoleApplication1
{
class MedPack : Item
{

private int healthReturn = 10;

public MedPack() : base()
{

}

public MedPack(String itemName, int itemQuantity) : base(itemName, itemQuantity)
{

}

public void useMedPack()
{
decreaseQuantity(1);
}

public static void pickUpMedPack(Dictionary<String, Item> inventory)
{

if (!inventory.ContainsKey("MedPack"))
{

inventory.Add("MedPack", new MedPack("MedPack", 1));

Console.WriteLine("You found a MedPack! It was added to the inventory");


}
else
{

inventory["MedPack"].increaseQuantity(1);

Console.WriteLine("You found ANOTHER MedPack! It was added to the inventory");

}
}
}
}

命名空间 ConsoleApplication1{ 类项目 {

    private String itemName;
private int itemQuantity;


public Item(String itemName, int itemQuantity)
{

this.itemName = itemName;
this.itemQuantity = itemQuantity;

}

public Item()
{

}

public void increaseQuantity(int increaseQuantity)
{

this.itemQuantity += increaseQuantity;

}

public void decreaseQuantity(int increaseQuantity)
{

this.itemQuantity -= increaseQuantity;

}


public String getName()
{

return this.itemName;
}

public void setName(String name)
{

this.itemName = name;

}

public int getQuantity()
{

return this.itemQuantity;
}

public void setQuantity(int x)
{

this.itemQuantity = x;

}

}

最佳答案

您的字典存储类型为Item 的对象。无法保证任意 Item 都是 MedPack,因此您不能直接对其调用 useMedPack

如果在您的情况下,您知道该元素是一个MedPack,您可以直接施放它:

((MedPack)inventory["MedPack"]).useMedPack();

或者两行:

MedPack mp = (MedPack)inventory["MedPack"];
mp.useMedPack();

如果在运行时该项目不是 MedPack,您将得到一个异常。

如果您想要一个可应用于所有 项类型的方法,则在Item 中定义它并根据需要在子类中覆盖它:

项目中:

public virtual void UseItem()
{
// base implementtaion
}

MedPack 中:

public override void UseItem()
{
// implementation specific to MedPack
}

关于c# - 通过字典访问子对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33024595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com