Вызов метода, когда предварительно неизвестен тип класса - C#
Формулировка задачи:
Форумчане, день добрый!
Имеется приблизительно вот такая структура в коде:
Кроме Task_1_1 от Tasks наследуются и другие подобные классы, типа Task_1_2, Task_2_1 с разными реализациями и override методом Execute().
Вопрос, как правильно организовать создание экземпляра класса и вызов этого метода в методе ChooseTask класса Tasks, если заранее неизвестно, какой именно тип класса будет и он зависит от входных данных?
Дошел приблизительно до этой стадии, дальше застопорился:
Можно ли как-то грамотно переписать (возможно, с помощью порождающих паттернов), если в будущем предполагается добавление других классов типа Task_[i]_[j], наследуемых от Tasks?
Листинг программы
- 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()
- {
- //код
- }
- }
- ...
Листинг программы
- 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
- }
Решение задачи: «Вызов метода, когда предварительно неизвестен тип класса»
textual
Листинг программы
- ((Tasks)task).Execute();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д