2011-05-17 93 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