我有三个多态类。根据用户输入,该类应设置为该用户的输入。因此子类由用户决定,并且应该为'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()
成为用户输入。
我看过Activator,Assembly,使用Type,尝试转换为GenerateStats
的父级,但没有任何效果。我发现很多人说它有效,而且有一个链接说它不起作用。有人可以帮我解决这个问题吗?非常感谢你!
答案 0 :(得分:3)
你确定Activator不起作用吗? Activator.CreateInstace("assembly-name", "type-name")
似乎正是您想要的。什么不起作用?
答案 1 :(得分:1)
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();
}
答案 2 :(得分:1)
确保包含所需类型的命名空间,这应该适用于您:
string classSelected = "testCode.Mage";
var player = Activator.CreateInstance(Type.GetType(classSelected));
由于Activator.CreateInstance()
返回object
,你必须进行强制转换 - 在你的情况下,转换为所有玩家类实现的接口是有意义的:
var player = (IPlayerCharacter) Activator.CreateInstance(Type.GetType(classSelected));