使用字符串变量设置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的父,但没有任何作用。我发现很多人说它有效,还有一个链接说它不起作用。有人能帮我澄清一下吗?非常感谢!

使用字符串变量设置Class()>' Class = new <字符串

你确定激活器不工作吗?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));