2010-02-04 109 views
0

我有各種實現IActiveRecord的類。將接口實例分配給實現該接口的類

我想有一個方法,我傳遞一個新創建的類和分配的ActiveRecord在傳遞的類的類型。

我曾嘗試以下,但它不會編譯由於某種原因。

任何想法?

private void AddRecord<T>() where T : class, new() 
     { 

      IActiveRecord ActiveRecord = (IActiveRecord)T; 
     } 
+6

而你的問題是什麼? – Oded 2010-02-04 15:48:36

回答

4

你的問題還不清楚,但如果我正確理解你要做的事情,你只需要添加約束where T : IActiveRecord。然後,你可以說

void AddRecord<T>() where T : IActiveRecord, new() { 
    IActiveRecord activeRecord = new T(); 
    // more stuff 
} 

關於你行

IActiveRecord ActiveRecord = (IActiveRecord)T;

這是不合法的。 T是一個類型參數,而不是您可以投射的表達式。

+0

即使new以new()的形式傳遞, – Jon 2010-02-04 15:55:19

0

我想你想通過限制你的方法如下:

private void AddRecord<T>() where T : IActiveRecord, new() 

否則,你的問題可能不清晰。

+0

感謝誰低估了我,但你能解釋我爲什麼回答不好嗎? – Webleeuw 2010-02-04 15:53:46

2

在你顯示的方法中,你沒有傳入某個特定類型的實例? 我真的不明白你想達到什麼目的。

你想做到這一點:

private void AddRecord<T>() where T : IActiveRecord, new() 
{ 
    IActiveRecord a = new T(); 
} 

2

看起來要約束泛型類型是IActiveRecord類型,那麼你不需要投:

private void AddRecord<T>() where T : IActiveRecord, new() 
{ 
    IActiveRecord a = new T(); 
}