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