使用字符串创建类的新实例
本文关键字:实例 新实例 字符串 创建 | 更新日期: 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语句(使用is
或typeof
)来避免这些异常。你也可以使用这个:
DrillTool tool = obj as DrillTool;
如果强制转换失败,它将返回null
。
不能强制转换为"dynamic"类型(不使用dynamic
关键字)。.NET中不支持/不允许这种行为。原因应该显而易见;如果字符串不同,并且生成的类型没有特殊属性,该怎么办。NET非常努力地实现类型安全,而像这样的行为绝不是类型安全的。
你似乎遇到了这样做的痛苦;这应该是我第一句话的一个指标你真的不应该这样做。有一些有效的用例;我真的怀疑你有没有。