C # Usando Activator.CreateInstance

ntem fiz uma pergunta sobre o uso de reflexão ou padrão de estratégia para chamar métodos dinamicament

No entanto, desde então, decidi alterar os métodos em classes individuais que implementam uma interface comum. O motivo é que cada classe, embora possua algumas semelhanças, também executa certos métodos exclusivos dessa class

Eu estava usando uma estratégia como tal:

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.");
}

o entanto, à medida que o número de classes em potencial aumenta, precisarei continuar adicionando novas, quebrando assim a regra de fechado para modificaçã

Em vez disso, usei uma solução como tal:

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

Efetivamente, o parâmetro _class é o nome da classe transmitida em tempo de execução. Essa é uma maneira comum de fazer isso? Haverá algum problema de desempenho com isso?

Sou bastante novo na reflexão, por isso seu conselho seria bem-vind

questionAnswers(6)

yourAnswerToTheQuestion