C# 使用字符串变量设置';类别=新<;类()的字符串>';
我有三个变形类。根据用户输入,该类应设置为该用户的输入。因此,子类由用户决定,应该是“class=newInputClass”。代码片段如下所示:C# 使用字符串变量设置';类别=新<;类()的字符串>';,c#,class,C#,Class,我有三个变形类。根据用户输入,该类应设置为该用户的输入。因此,子类由用户决定,应该是“class=newInputClass”。代码片段如下所示: public void characterGeneration(string classSelected) { foreach (string classInList in classes.ClassList) { if (classSelected == classInList)
public void characterGeneration(string classSelected)
{
foreach (string classInList in classes.ClassList)
{
if (classSelected == classInList)
{
PlayerOneStats = new Mage();
}
}
PlayerOneStats.generateStats();
}
上面写着playeronstats=new Mage()
,我希望Mage()
作为用户输入
我已经研究了Activator、Assembly、使用Type,试图转换为
GenerateStats
的父级,但没有任何效果。我发现很多人说它有效,但有一个链接说它无效。谁能帮我澄清一下吗?多谢各位 您确定Activator不工作吗Activator.createInstance(“程序集名称”、“类型名称”)
似乎正是您想要的。什么不起作用?什么是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()
返回一个对象
,因此必须强制转换-在您的情况下,强制转换到所有玩家类都实现的接口是有意义的:
var player = (IPlayerCharacter) Activator.CreateInstance(Type.GetType(classSelected));
我需要设置playeronostats=new“类字符串”,当我尝试执行playeronostats=new Activator.CreateInstance(…)时,它告诉我CreateInstance(…)是一个方法,但像类型一样使用。我需要有新的关键字在那里实例化我的(法师/战士/盗贼)类正确吗?啊,我看到这里的问题。不,在使用Activator.CreateInstance时,您不需要使用
new
关键字,我的“程序集名称”和“类型名称”是什么?类型名称是您得到的字符串。程序集名称iis在中定义类型的程序集。PlayerOnStats=new(GenerateStats)Activator.CreateInstance(classSelected);给我'Game.GenerateStats'是一种类型,但像变量一样使用。参数中的'type stat'是什么?请注意。试试我现在放的东西。用你的Mage
等实际名称空间替换“YourNamespace”。类在其中。谢谢谢谢谢谢!我花了太长时间想弄明白。我有一些属性是通过用户输入提取出来的,但无法计算出类。现在,它已经解决,我在路上完成这个程序。最后一个问题是,您如何比较您如何创建它的结果,以便我可以将这些类与“Activator.CreateInstance(“程序集名称”、“类型名称”)”进行比较。我不知道如何使后者起作用;我不知道程序集名称和类型名称,所以无论如何我都无法让它工作,尽管知道会很好。另外,我可以在某个地方给你一个plus-one代表吗?我是这个网站的新手。