Я пытаюсь реорганизовать некоторый код, введя дженерики, и я застрял. Я пытаюсь создать новый экземпляр T, но проблема в том, что T имеет аргумент делегата в конструкторе. То, к чему я стремился, было что-то вроде этого:
public delegate IOrders DoStuffDelegate();
public class GenericBoss<T> where T:Worker
{
public void DelegateWork()
{
T worker = Activator.CreateInstance(typeof(T), new[]{GiveOrders})
worker.Work();
}
public IOrders GiveOrders()
{
return new OrderFromTheBoss();
}
}
public class Worker
{
private readonly DoStuffDelegate _takeOrders;
public Worker(DoStuffDelegate takeOrders)
{
_takeOrders = takeOrders;
}
public void Work()
{
_takeOrders();
}
}
Однако, это не работает, так как только [объект] типы разрешены в качестве аргументов в [Активатор] . Мне не разрешено изменять конструктор, поэтому перемещение делегата в другое место невозможно.
Есть ли выход, или дженерики здесь не вариант?
С уважением,
Morten