我很欣赏在下面的“类”
中作为一个变量是不正确的,请跟我裸露,我只是用它来试着问一下这到底是怎么做的?
理论代码:
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个问题,其中包括字符串以外的变量。这是一个虚构的,“尽可能基本”的示例。)
按照你设计的方式做它的方法是通过反射,这是混乱的。 我建议,与其将每个问题都作为一个单独的类,不如用一个类来表示一个抽象问题,然后将所有问题存储在一个易于按名称索引的数据结构中:
我知道,我可以将这些问题和答案全部存储在字典中的manager脚本中,例如,但是在许多类别中有超过3000个问题,其中包括字符串以外的变量。 这是一个虚构的“尽可能基本”的例子。
我看不出为每个问题创建一个单独的类如何更具有可伸缩性。 您可以为您的“类别”拥有独立的子类,这取决于每个类别的属性是唯一的,但是拥有3000个范围非常有限的类似乎更糟糕。
通过使用反射,可以基于类的名称创建它们的实例:
var questionClass = Activator.CreateInstance(null, "MyApp.Lions");
这假定lions
类位于myapp
命名空间中。