2
考慮下面的類層次結構:協方差,逆變和消除多餘的類型參數
abstract class A { }
abstract class B { }
abstract class C { }
abstract class D<TA, TB, TC>
where TA : A
where TB : B
where TC : C { }
class E : A { }
class F : B { }
class G : C { }
class H : D<E, F, G> { }
我想創建一個簡單的通用方法實例D
類型的對象:
void Create<TD>(string description)
where TD : D
{
var instance = Activator.CreateInstance<TD>();
}
但是,編譯強制指定D
的類型參數,因此我必須編寫以下內容:
void Create<TD, TA, TB, TC>(string description)
where TA : A
where TB : B
where TC : C
where TD : D<TA, TB, TC>
{
var instance = Activator.CreateInstance<D>();
}
這意味着,不是能寫
Create<H>("foo");
我必須寫
Create<H, E, F, G>("foo");
我的問題是:因爲我指定H
作爲具體實例,爲什麼需要編譯器方法簽名上的基類D
的附加類型參數?爲什麼不能簡單地從H
推斷那些?
你期望能夠說'where TL:List'是什麼意思?'TL'是一些關閉的'List <>',但我不在乎哪一個? – AakashM 2012-02-13 15:16:44