taskA, taskB, taskC наследуются от моего класса Task
ContextA, ContextA2, ContextB, ContextC наследуются от моего класса Context
Контексты имеют соответствующую задачу в качестве свойства класса:
public abstract class Context
{
public String CommonProperty { get; set; }
public abstract void MethodToOverride();
}
public class ContextA : Context
{
public TaskA Task { get; set; }
public override void MethodToOverride()
{
//do stuff with this.Task and this.CommonProperty
}
}
public class ContextA2 : Context
{
public TaskA Task { get; set; }
public override void MethodToOverride()
{
//do stuff with this.Task and this.CommonProperty
}
}
public class ContextB : Context
{
public TaskB Task { get; set; }
public override void MethodToOverride()
{
//do stuff with this.Task and this.CommonProperty
}
}
И так далее ...
При переборе списка задач я хочу создать соответствующий Контекст:
foreach (Task t in tasks)
{
Context context;
if (t is TaskA)
{
if (condition)
{
context = new ContextA() { Task = t as TaskA};
}
else
{
context = new ContextA2() { Task = t as TaskA };
}
}
else if (t is TaskB)
{
context = new ContextB() { Task = t as TaskB };
}
else if (t is TaskC)
{
context = new ContextC(){ Task = t as TaskC };
}
else
{
throw new Exception("Unkown Task");
}
context.CommonProperty = "value";
context.MethodToOverride();//Do different things based on the context type
}
Я чувствую, что для этого должен быть более чистый способ, но я не могу понять, как управлять созданием объекта контекста, особенно в случае contextA и contextA2, которые зависят от условия.