我目前正在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.
如果我某处不清楚或者您需要更多信息,请告诉我们需要什么。
感谢任何帮助。在此先感谢。
答案 0 :(得分:0)
如果你必须这样做,你可能做错了!
好的,那说;你只需要Activator.CreateInstance
(MSDN)
Type myType = Type.GetType(typeString);
object obj = Activator.CreateInstance(myType, myargs, "MyOtherStringArgs");
我真的不明白你的第二个问题;这个演员会工作:
DrillTool tool = (DrillTool)obj;
当然,如果演员表无效,它会抛出。您需要if语句(使用is
或typeof
)来避免这些异常。你也可以用这个:
DrillTool tool = obj as DrillTool;
如果演员表失败,将返回null
。
您无法转换为“动态”类型(不使用dynamic
关键字)。 .NET不支持/允许此行为。推理应该是显而易见的;如果字符串不同,结果类型没有特殊属性怎么办? .NET尝试很难成为类型安全的,这样的行为不是类型安全的。
你似乎遇到了这样做的痛苦;这应该是我的第一句话的指标。 你真的不应该这样做。有一些有效的用例;我真诚地怀疑你有其中一个。