2
我试图通过引入泛型来重构一些代码,并且卡住了。我试图创建一个新的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();
}
}
然而,这是不行的,因为只有[对象]类型都可以作为在[激活]参数。我不允许更改构造函数,因此不可能将代理移到其他地方。
有没有出路,或者是泛型不是一个选项在这里?
问候, 莫滕
我认为'Activator.CreateInstance'在这种情况下返回一个对象吗?一个'as'强制类型或通用版本应该是应用。 – 2011-03-09 09:49:34
@Danny:是的,演员将是必需的 - 将加入英寸我是专注于事物的争论方面,我认为这是OP的原始问题:) – 2011-03-09 09:50:26
是的,我不得不把它回到T,但那么它的工作。谢谢。你只是让我的代码更漂亮:o) – Morten 2011-03-09 09:53:48