【发布时间】:2021-12-07 04:18:56
【问题描述】:
我正在尝试根据给定的输入生成子类的实例,因此我创建了一个以 System.Type 作为键的字典(尽管我将使用字符串创建一个示例以便于理解)并返回一个 System.Type 作为值。
类似这样的:
Dictionary<string, System.Type> types = new Dictionary<string, System.Type>()
{
{ "Weapon", System.Type.GetType("WeaponClass") },
{ "Consumable", System.Type.GetType("ConsumableClass") },
{ "Resource", System.Type.GetType("ResourceClass") }
};
WeaponClass、ConsumableClass 和 ResourceClass 是同一类 ItemClass 的子类。
所以我想创建一个函数来做这样的事情:
public ItemClass CreateItem(string itemName)
{
System.Type type = types[itemName];
// This is the part that I don't know how to make
return new type();
}
这应该返回一个对应子类的实例,但是我不知道怎么做。
谁能帮帮我?
【问题讨论】:
-
你可以使用类似 `switch(type) { case "Weapon": { return new WeaponClass(); } case "Consumable": { return new ConsumableClass(); } } `
-
我目前有一个类似的实现,但我宁愿有一个字典,因为它会使代码更清晰,更容易升级。不过,这是个好主意
-
在游戏中你最不想做的就是通过反射使用动态创建
-
@JavierRieraChirivella a Dictionary 和 switch 实际上或多或少是等价的,除了在字典中您可以在运行时动态添加元素 ....