使用字符串变量设置Class()>' Class = new <字符串
本文关键字:字符串 Class new 变量 设置 | 更新日期: 2023-09-27 18:16:14
我有三个多态类。根据用户输入,类应该设置为该用户的输入。所以子类是由用户决定的,应该为'class = new inputClass'。代码片段如下:
public void characterGeneration(string classSelected)
{
foreach (string classInList in classes.ClassList)
{
if (classSelected == classInList)
{
PlayerOneStats = new Mage();
}
}
PlayerOneStats.generateStats();
}
这里写的是PlayerOneStats = new Mage();
,我想让Mage()
作为用户输入。
我看过激活器,汇编,使用类型,试图转换到GenerateStats
的父,但没有任何作用。我发现很多人说它有效,还有一个链接说它不起作用。有人能帮我澄清一下吗?非常感谢!
你确定激活器不工作吗?Activator.CreateInstace("assembly-name", "type-name")
似乎正是你想要的。什么不起作用?
Mage
的基类是什么(以及用户可以选择的其他类)?您应该能够这样做:
public void characterGeneration(string classSelected)
{
foreach (string classInList in classes.ClassList)
{
if (classSelected == classInList)
{
PlayerOneStats = (GenerateStats)Assembly.GetExecutingAssembly().CreateInstance("YourNamespace." + classSelected);
break;
}
}
PlayerOneStats.generateStats();
}
确保您包含了您想要包含的类型的名称空间,这应该可以为您工作:
string classSelected = "testCode.Mage";
var player = Activator.CreateInstance(Type.GetType(classSelected));
因为Activator.CreateInstance()
返回一个object
,你将不得不强制转换——在你的情况下,强制转换到一个接口是有意义的,你所有的播放器类实现:
var player = (IPlayerCharacter) Activator.CreateInstance(Type.GetType(classSelected));