Вызов метода, когда предварительно неизвестен тип класса - C#

Узнай цену своей работы

Формулировка задачи:

Форумчане, день добрый! Имеется приблизительно вот такая структура в коде:
class Tasks
{
    //Поле для хранения имени класса конкретной задачи
    private string _taskType;
 
    public void ChooseTask(int a, int b)
    {
        this._taskType = "Task_" + a.ToString() + "_" + b.ToString();
        Type type = Type.GetType(this._taskType);
        object task = Activator.CreateInstance(type);
        //? вызвать Execute() для task
    }
 
    public virtual void Execute()
    {
        //код
    }
 
    public virtual void Print()
    {
        //код
    }
}
 
class Task_1_1: Tasks
{
    public override void Execute()
    {
         //код
    }
}
...
Кроме Task_1_1 от Tasks наследуются и другие подобные классы, типа Task_1_2, Task_2_1 с разными реализациями и override методом Execute(). Вопрос, как правильно организовать создание экземпляра класса и вызов этого метода в методе ChooseTask класса Tasks, если заранее неизвестно, какой именно тип класса будет и он зависит от входных данных? Дошел приблизительно до этой стадии, дальше застопорился:
public void ChooseTask(int a, int b)
        {
            this._taskType = "Task_" + a.ToString() + "_" + b.ToString();
            Type type = Type.GetType(this._taskType);
            object task = Activator.CreateInstance(type);
            //? вызвать Execute() для task
        }
Можно ли как-то грамотно переписать (возможно, с помощью порождающих паттернов), если в будущем предполагается добавление других классов типа Task_[i]_[j], наследуемых от Tasks?

Решение задачи: «Вызов метода, когда предварительно неизвестен тип класса»

textual
Листинг программы
((Tasks)task).Execute();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5