使用字符串变量设置'Class = new <string of =“”class()=“”>'</string>

时间:2011-11-28 21:56:27

标签: c# class

我有三个多态类。根据用户输入,该类应设置为该用户的输入。因此子类由用户决定,并且应该为'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的父级,但没有任何效果。我发现很多人说它有效,而且有一个链接说它不起作用。有人可以帮我解决这个问题吗?非常感谢你!

3 个答案:

答案 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));