我有一個叫做PointValue
,PointValue
的類,他的繼承者只能通過接收一個浮點參數的參數化構造函數創建。泛型類c中的函數專業化#
我有一個泛型類,代表點的列表,模板類型必須從PointValue
繼承。
我需要的一個功能將有能力添加點列表,因爲我不能強制使用模板參數化的構造函數。我的功能獲得pointValueCreator
創建新的點。
PointList<PointValue> bla = new PointList<PointValue>();
我可以打電話給我的功能是這樣的::
public class PointList<PointValueT> where PointValueT : PointValue
{
public void addPointToList(float f, Func<float,PointValueT> pointValueCreator)
{
// do something to f and then add a new point:
mylist.Add(pointValueCreator(f));
}
}
所以,現在如果我有這樣的事情
bla.addPointToList(f, (myfloat) => new PointValue(myfloat));
我的問題是如何爲addPointToList
爲創建專業化的我繼承人,以避免傳遞的創造者。
類似:
public void addPointToList(float f)
{
this.addPointToList(f, (myfloat) => new PointValue(myfloat));
}
我試圖做到這一點,但是編譯器說: 無法隱式轉換類型「PointValue」到「PointValueT」。一個明確的轉換存在(你是否缺少演員?)
我明白,c#沒有專業化,如果是這樣的話,也許一些「設計」技巧可以幫助我嗎? 假設我有PointValueA和PointValueB inherting,我如何避免手動爲每個人傳遞創作者?
刪除''。 –
Amit
在c#中,它們被稱爲_generics_ **而非**模板。 – MickyD
嗨@Amit,我編輯了這個問題,我不小心寫了它。問題仍然是一樣的。 – OopsUser