使用字符串创建类的新实例

时间:2014-11-07 17:29:20

标签: c# xna

我目前正在XNA中制作游戏,我一直在尝试使用字符串来创建一个类。我想让它像这样工作:

string classtype = "DrillTool"; //classtype/classname
InvItem item = new .... ("DrillTool"); //this is where i'm lost!

DrillTool类如下所示:

class DrillTool : InvItem

//The constructor is something like this
public DrillTool(string itemName, string spriteName, string storedBatteryPower etc.)

所以我的问题是: 如何使用字符串创建类的新实例?我如何传递参数或"构造函数值"到新创建的课程

Detailes在这下面:

MyClass类继承自InvItem(InventoryItem)类,因此我可以在同一个列表中保留不同的类,因为它们都应该是项目。这些项目分为不同的类,因为我希望它们具有不同的能力/值和命令。

另一个问题:如何在不使用任何if语句的情况下将类转换为自己的类型/类?

像这样:

InvItem drillItem = new DrillTool(etc.);

(Typeof(drillItem))drillItem.valueThatOnlyExistsInDrillToolClass; //?
//I can't access the DrillTool values of drillItem if it has not been "converted".

而不是这个:

if (drillItem.GetType() == typeof(DrillTool))
{
    currentItem = (DrillTool)drillItem;
    currentItem.valueThatOnlyExistsInDrillToolClass;
}
else if (etc.) //I am gonna end up with over 20 classes at least.

如果我某处不清楚或者您需要更多信息,请告诉我们需要什么。

感谢任何帮助。在此先感谢。

1 个答案:

答案 0 :(得分:0)

如果你必须这样做,你可能做错了!

好的,那说;你只需要Activator.CreateInstanceMSDN

的重载
Type myType = Type.GetType(typeString);
object obj = Activator.CreateInstance(myType, myargs, "MyOtherStringArgs");

我真的不明白你的第二个问题;这个演员会工作:

DrillTool tool = (DrillTool)obj;

当然,如果演员表无效,它会抛出。您需要if语句(使用istypeof)来避免这些异常。你也可以用这个:

DrillTool tool = obj as DrillTool;

如果演员表失败,将返回null

无法转换为“动态”类型(不使用dynamic关键字)。 .NET不支持/允许此行为。推理应该是显而易见的;如果字符串不同,结果类型没有特殊属性怎么办? .NET尝试很难成为类型安全的,这样的行为不是类型安全的。

你似乎遇到了这样做的痛苦;这应该是我的第一句话的指标。 你真的不应该这样做。有一些有效的用例;我真诚地怀疑你有其中一个。