Создание объекта по имени класса [дубликат]

227
31 января 2019, 08:00

На данный вопрос уже ответили:

  • Способы создания объектов в C# 2 ответа

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

Сами задачи хранятся в таблице БД. в одном из полей указывается имя класса метод Run() которого нужно выполнить по расписанию. соответственно при запуске нужно определить экземпляр какого класса создавать

private void TimerTask(object Obj)
{
    IsRuning = true;
    SetNextStartTask();
    switch (Metod)
    {
        case "ExportXML0":
            {
                Task task = Task.Factory.StartNew(() =>
                {
                    ExportData export = new ExportXML0(Id);
                    export.Run();
                });
                if (task.IsCompleted) { task.Dispose(); }
                break;
            }
        case "ExportUniversalToTXT":
            {
                Task task = Task.Factory.StartNew(() =>
                {
                    ExportData export = new ExportUniversalToTXT(Id);
                    export.Run();
                });
                if (task.IsCompleted) { task.Dispose(); }
                break;
            }
    }
    IsRuning = false;
}

Сейчас классов относительно не много, около 30. Когда их будет 100+ то этот метод будет выглядеть страшно. Как можно упростить этот выбор?

В некоторых языках, к примеру SQL или Caché Basic можно написать какой-то текст и его выполнить, как красиво это сделать в C#

Answer 1

Используйте рефлексию

Task task = Task.Factory.StartNew(() =>
{
  ExportData export = (ExportData)Activator.CreateInstance(
    assemblyName, Metod, new object[] {Id}
  );
  export.Run();
});
if (task.IsCompleted) { task.Dispose(); }
READ ALSO
Создание dll с Roslyn

Создание dll с Roslyn

Пробую создать dll библиотеку c RoslynДобавил все библиотеки с NuGet для работы с Roslyn

235
Выделение объекта по контуру

Выделение объекта по контуру

Какие есть способы выделения(либо подсветки, а еще лучше подсветки только контура) объекта в игре при наведении на него курсораЕсли использовать...

232
c# сокеты клиент-сервер

c# сокеты клиент-сервер

У меня небольшая проблемка в работе с клиент-сервером

220
“Портится” класс в теге кнопки WPF

“Портится” класс в теге кнопки WPF

Пытаюсь передать методу класс, который лежит в теге кнопки, при создании собственно в самом вызове все хорошо

248