Рекомендации по программированию при создании класса с использованием имени класса
Хорошо, я искал и видел несколько вопросов о том, как создать класс, используя его имя. Мой вопрос не совсем такой, поэтому я все равно задам его.
Мое приложение имеет 2 класса, скажем, "А" и "В". В другом классе мне нужно использовать эти два класса (третий класс вызывается внешним сервисом). Внешний сервис передает мне только имена двух классов "A" и "B" в виде строки. В третьем классе я знаю, что могу сделать что-то вроде:
case "A":
create an instance of A
case "B":
create an instance of B
но это кажется странным Я хотел бы сделать это динамически, поэтому я думал о создании Activator.CreateInstance, но не уверен, что это хорошее программирование, потому что кажется, что "CreateInstance" используется при удаленной загрузке сборки. В моем случае все в одном проекте.
Любой совет? Спасибо вам большое!
2 ответа
Это идеальный случай для использования шаблона Factory Method.
Если количество классов, которые вы хотите создать по их имени, ограничено (например, 2 разных класса в вашем примере), я бы предпочел способ с "switch"
public object ClassFactory(string ClassName)
{
switch(ClassName)
{
case "A": return new A();
case "B": return new B();
}
}
потому что это и быстрее, и безопаснее (если имя класса исходит от внешней службы, представьте, что произойдет, если эта служба отправит вредоносное имя класса).
В противном случае Activator.CreateInstance не должен создавать проблем, но убедитесь, что вы тщательно проверили ввод.