2011-05-17 120 views
1

我只是無法弄清楚如何在c#中編寫等價的接口。c#泛型,傳遞類

的Java:

public interface DAO { 
    <T> T find(Class<T> c, Object key); 

    <T> List<T> get(Class<T> c); 

    <T> void persist(T object); 
} 

這是我嘗試迄今在C#中,問題是我需要的類來調用dataclassesdatacontext.GetTable<Class here>().ToList();

interface IDAO 
{ 
    T Find<T>(object key); 

    List<T> Get<T>(T c); 

    void Persist<T>(T obj); 
} 

我想實現這樣的:

public List<T> Get<T>() { return _dbx.GetTable<T>().ToList(); }

其中_dbx是dataclassda tacontext(linq to sql)。 但是我得到一個紅線下T說: 類型'T'必須是引用類型爲了使用它作爲參數。

+0

除了'Get '方法(我沒有看到將T的實例傳遞給該方法的目的,它應該只是'Get ()'),你的界面看起來沒問題。你在哪裏發現問題? – Groo 2011-05-17 06:30:18

回答

1

你在找什麼是Generic constraints。即你需要添加where T : class與T參數的方法。

就像Darin Dimitrov說的那樣,爲整個界面設置類型,而不是每個方法都可能是個好主意。這將導致更清晰的設計。

4

泛型參數可以被放置在接口定義:

public interface IDAO<T> 
{ 
    T Find(object key); 
    List<T> Get(T c); 
    void Persist(T obj); 
} 
+0

目前還不清楚'Get'方法應該有一個參數。我認爲它的意思是「獲取T型的所有對象」。 – Gabe 2011-05-17 06:36:26

+0

@加貝,沒錯,它應該可能是一些其他的對象。不幸的是,OP沒有提供足夠的關於他的情況的信息,所以我們只能猜測。 – 2011-05-17 06:37:35

+0

對不起。但你是對的。 Get方法的最終結果應該是獲取某個類的數據庫中的所有對象。該查找應找到指定的類的對象與指定的鍵 – brianfroelund 2011-05-17 06:49:55