2011-11-28 71 views
4

我有三个变形类。基于用户输入,该类应该设置为该用户的输入。所以子类由用户决定,并且应该为'class = new inputClass'做准备。代码段的样子:使用字符串变量设置'Class = new <Class of Class()>''

public void characterGeneration(string classSelected) 
    { 
     foreach (string classInList in classes.ClassList) 
     { 
      if (classSelected == classInList) 
      { 
       PlayerOneStats = new Mage(); 
      } 
     } 

     PlayerOneStats.generateStats(); 
    } 

凡说PlayerOneStats = new Mage();,我想Mage()为用户输入。

我看过激活器,大会,使用类型,试图抛到GenerateStats的父,但没有任何作品。我发现很多人说它是有效的,一个链接说它不起作用。有人可以为我清楚吗?非常感谢你!

回答

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(); 
    } 
+0

PlayerOneStats = new(GenerateStats)Activator.CreateInstance(classSelected); 给我'Game.GenerateStats是一种类型,但像变量一样使用 – user1056607

+0

删除'new'关键字。这是不正确的。 –

+0

什么将'类型统计'在参数? – user1056607

3

你确定Activator不起作用吗? Activator.CreateInstace("assembly-name", "type-name")看起来正是你想要的。什么不行?

+0

我需要设置PlayerOneStats = new“Class of String”当我尝试执行PlayerOneStats = new Activator.CreateInstance(...)时,它告诉我CreateInstance(...)是一种方法,但是像使用类型一样。我需要在那里有新的关键字来实例化我的(法师/战士/盗贼)类正确吗? – user1056607

+2

啊,我在这里看到这个问题。不,您在使用Activator.CreateInstance时不需要'new'关键字 –

+0

我的“程序集名称”和“类型名称”是什么? – user1056607

1

请确保您有您想要的类型包含在命名空间,这应该为你工作:

string classSelected = "testCode.Mage"; 
var player = Activator.CreateInstance(Type.GetType(classSelected)); 

由于Activator.CreateInstance()返回一个object你会必须施放 - 在你的情况下,将一个接口投射到你的所有播放器类实现是有意义的:

var player = (IPlayerCharacter) Activator.CreateInstance(Type.GetType(classSelected)); 
相关问题