我有各種實現IActiveRecord的類。將接口實例分配給實現該接口的類
我想有一個方法,我傳遞一個新創建的類和分配的ActiveRecord在傳遞的類的類型。
我曾嘗試以下,但它不會編譯由於某種原因。
任何想法?
private void AddRecord<T>() where T : class, new()
{
IActiveRecord ActiveRecord = (IActiveRecord)T;
}
我有各種實現IActiveRecord的類。將接口實例分配給實現該接口的類
我想有一個方法,我傳遞一個新創建的類和分配的ActiveRecord在傳遞的類的類型。
我曾嘗試以下,但它不會編譯由於某種原因。
任何想法?
private void AddRecord<T>() where T : class, new()
{
IActiveRecord ActiveRecord = (IActiveRecord)T;
}
你的問題還不清楚,但如果我正確理解你要做的事情,你只需要添加約束where T : IActiveRecord
。然後,你可以說
void AddRecord<T>() where T : IActiveRecord, new() {
IActiveRecord activeRecord = new T();
// more stuff
}
關於你行
IActiveRecord ActiveRecord = (IActiveRecord)T;
這是不合法的。 T
是一個類型參數,而不是您可以投射的表達式。
即使new以new()的形式傳遞, – Jon 2010-02-04 15:55:19
我想你想通過限制你的方法如下:
private void AddRecord<T>() where T : IActiveRecord, new()
否則,你的問題可能不清晰。
感謝誰低估了我,但你能解釋我爲什麼回答不好嗎? – Webleeuw 2010-02-04 15:53:46
在你顯示的方法中,你沒有傳入某個特定類型的實例? 我真的不明白你想達到什麼目的。
你想做到這一點:
private void AddRecord<T>() where T : IActiveRecord, new()
{
IActiveRecord a = new T();
}
?
看起來要約束泛型類型是IActiveRecord
類型,那麼你不需要投:
private void AddRecord<T>() where T : IActiveRecord, new()
{
IActiveRecord a = new T();
}
而你的問題是什麼? – Oded 2010-02-04 15:48:36