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

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

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

Форумчане, день добрый! Имеется приблизительно вот такая структура в коде:
Листинг программы
  1. class Tasks
  2. {
  3. //Поле для хранения имени класса конкретной задачи
  4. private string _taskType;
  5. public void ChooseTask(int a, int b)
  6. {
  7. this._taskType = "Task_" + a.ToString() + "_" + b.ToString();
  8. Type type = Type.GetType(this._taskType);
  9. object task = Activator.CreateInstance(type);
  10. //? вызвать Execute() для task
  11. }
  12. public virtual void Execute()
  13. {
  14. //код
  15. }
  16. public virtual void Print()
  17. {
  18. //код
  19. }
  20. }
  21. class Task_1_1: Tasks
  22. {
  23. public override void Execute()
  24. {
  25. //код
  26. }
  27. }
  28. ...
Кроме Task_1_1 от Tasks наследуются и другие подобные классы, типа Task_1_2, Task_2_1 с разными реализациями и override методом Execute(). Вопрос, как правильно организовать создание экземпляра класса и вызов этого метода в методе ChooseTask класса Tasks, если заранее неизвестно, какой именно тип класса будет и он зависит от входных данных? Дошел приблизительно до этой стадии, дальше застопорился:
Листинг программы
  1. public void ChooseTask(int a, int b)
  2. {
  3. this._taskType = "Task_" + a.ToString() + "_" + b.ToString();
  4. Type type = Type.GetType(this._taskType);
  5. object task = Activator.CreateInstance(type);
  6. //? вызвать Execute() для task
  7. }
Можно ли как-то грамотно переписать (возможно, с помощью порождающих паттернов), если в будущем предполагается добавление других классов типа Task_[i]_[j], наследуемых от Tasks?

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут