我在C#中的類模板和類似的靜態方法來從靜態方法在派生類中創建通用類實例
class BClass<T>
{
public static BClass<T> Create()
{
return new BClass<T>();
}
}
由此我得出一個類,並指定一個模板參數的基類
class DClass : BClass<int> { }
當我嘗試使用靜態方法來創建d的實例出現問題
class Program
{
static void Main(string[] args)
{
DClass d = DClass.Create();
}
}
給出編譯器錯誤「不能隱式轉換類型」Test.BClass < int>'to'Test.DClass'。「
將下面的cast添加到運行時轉換異常中。
DClass d = (DClass)DClass.Create();
是否有任何簡單的方法來允許靜態方法創建派生類的實例?理想情況下,我想要一個C++ typedef的等價物,我不想要下面的語法(它可以工作)。
BClass<int> d = DClass.Create();
沒有想到一個類可以在超類中引用自己作爲類型參數嗎?雞雞蛋佯謬或其他... – 2010-05-27 13:04:51
聰明,有點奇怪! ;)我在這裏看到的唯一缺點是似乎永遠沒有辦法實例化一個普通的舊'BClass',就像在OP的原始代碼中那樣。 –
2010-05-27 13:04:58
@Peter,我實際上已經成功地使用了它。例如,它也允許你創建一個更好的克隆方法,因爲它消除了重新投射的需要等。 – Lucero 2010-05-27 13:13:17