Рекомендации по программированию при создании класса с использованием имени класса

Хорошо, я искал и видел несколько вопросов о том, как создать класс, используя его имя. Мой вопрос не совсем такой, поэтому я все равно задам его.

Мое приложение имеет 2 класса, скажем, "А" и "В". В другом классе мне нужно использовать эти два класса (третий класс вызывается внешним сервисом). Внешний сервис передает мне только имена двух классов "A" и "B" в виде строки. В третьем классе я знаю, что могу сделать что-то вроде:

case "A":
    create an instance of A
case "B":
    create an instance of B

но это кажется странным Я хотел бы сделать это динамически, поэтому я думал о создании Activator.CreateInstance, но не уверен, что это хорошее программирование, потому что кажется, что "CreateInstance" используется при удаленной загрузке сборки. В моем случае все в одном проекте.

Любой совет? Спасибо вам большое!

2 ответа

Решение

Это идеальный случай для использования шаблона Factory Method.

http://www.dofactory.com/Patterns/PatternFactory.aspx

Если количество классов, которые вы хотите создать по их имени, ограничено (например, 2 разных класса в вашем примере), я бы предпочел способ с "switch"

public object ClassFactory(string ClassName)
{
    switch(ClassName)
    {
        case "A": return new A();
        case "B": return new B();
    }
}

потому что это и быстрее, и безопаснее (если имя класса исходит от внешней службы, представьте, что произойдет, если эта служба отправит вредоносное имя класса).

В противном случае Activator.CreateInstance не должен создавать проблем, но убедитесь, что вы тщательно проверили ввод.

Другие вопросы по тегам