C # с использованием активатора. CreateInstance

Вчера я задал вопрос относительно использования отражения или шаблона стратегии для динамического вызова методов.

Однако с тех пор я решил изменить методы в отдельные классы, реализующие общий интерфейс. Причина в том, что каждый класс, хотя и имеет некоторое сходство, также выполняет определенные методы, уникальные для этого класса.

Я использовал стратегию как таковую:

switch (method)
{
    case "Pivot":
        return new Pivot(originalData);
    case "GroupBy":
        return new GroupBy(originalData);
    case "Standard deviation":
        return new StandardDeviation(originalData);
    case "% phospho PRAS Protein":
        return new PhosphoPRASPercentage(originalData);
    case "AveragePPPperTreatment":
        return new AveragePPPperTreatment(originalData);
    case "AvgPPPNControl":
        return new AvgPPPNControl(originalData);
    case "PercentageInhibition":
        return new PercentageInhibition(originalData);
    default:
        throw new Exception("ERROR: Method " + method + " does not exist.");
}

Однако по мере роста числа потенциальных классов мне нужно будет сохранить добавление новых, что нарушает правило закрытия для модификации.

Вместо этого я использовал решение как таковое:

var test = Activator.CreateInstance(null, "MBDDXDataViews."+ _class);
       ICalculation instance = (ICalculation)test.Unwrap();
       return instance;

Фактически, Является ли это обычным способом сделать это, возникнут ли при этом проблемы с производительностью?

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

50
задан Abel 10 March 2011 в 11:22
поделиться