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

本文关键字:实例 新实例 字符串 创建 | 更新日期: 2023-09-27 18:29:46

我目前正在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.)

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

详情如下:

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.

如果我在某个地方不清楚,或者你需要更多信息,那就告诉我需要什么。

感谢您的帮助。提前感谢。

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

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

好吧,是这样说的;您只需要一个过载的Activator.CreateInstance(MSDN)

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"类型(不使用dynamic关键字)。.NET中不支持/不允许这种行为。原因应该显而易见;如果字符串不同,并且生成的类型没有特殊属性,该怎么办。NET非常努力地实现类型安全,而像这样的行为绝不是类型安全的。

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