提问者:小点点

如何通过String更改我从哪个类调用变量? C#


我很欣赏在下面的“类”中作为一个变量是不正确的,请跟我裸露,我只是用它来试着问一下这到底是怎么做的?

理论代码:

public class Manager
{
    public string questionClassName;
    string question;
    string answer;
    Class questionClass;

    public void createQuestion()
    {
    questionClassName = "Lions"; //Set the name of the class I want to use as a string
    questionClass = questionClassName; //Select the class being used by name via string
    question = questionClass.question; //Question now set as the question from that class
    answer = questionClass.answer; //Same logic for answer
    Console.WriteLine("Question " + question + " Answer: " + answer); //Output
    }

}

public class Lions
{
    string question = "Which gender has the mane?";
    string answer = "Male";
}

public class Elephants
{
    string question = "Do elephants have tusks?";
    string answer = "Yes";
}

>

  • 我试图将大量问题存储在单独的类中,作为字符串。 然后,我希望在这些类中进行选择,通过Manager类显示他们的特定问题。

    将Manager类中的字符串QuestionClassName更改为其中一个类(本例中为狮子或大象)的名称,将导致Manager显示该类中保存的问题和答案。

    (例如,我知道我可以将这些问题和答案全部存储在字典中的manager脚本中,但在许多类别中有超过3000个问题,其中包括字符串以外的变量。这是一个虚构的,“尽可能基本”的示例。)


  • 共2个答案

    匿名用户

    按照你设计的方式做它的方法是通过反射,这是混乱的。 我建议,与其将每个问题都作为一个单独的类,不如用一个类来表示一个抽象问题,然后将所有问题存储在一个易于按名称索引的数据结构中:

    我知道,我可以将这些问题和答案全部存储在字典中的manager脚本中,例如,但是在许多类别中有超过3000个问题,其中包括字符串以外的变量。 这是一个虚构的“尽可能基本”的例子。

    我看不出为每个问题创建一个单独的类如何更具有可伸缩性。 您可以为您的“类别”拥有独立的子类,这取决于每个类别的属性是唯一的,但是拥有3000个范围非常有限的类似乎更糟糕。

    匿名用户

    通过使用反射,可以基于类的名称创建它们的实例:

    var questionClass = Activator.CreateInstance(null, "MyApp.Lions");
    

    这假定lions类位于myapp命名空间中。

    相关问题