【发布时间】:2011-11-08 19:03:22
【问题描述】:
我有一个数据访问库,我想返回不同的数据格式(XML、Json、DataTable)。我试图使用泛型来实现这一点。
public interface IDBInteractor<T>
{
T ExecuteDSQuery(string myQuery)
}
public class DBInteractorDT : IDBInteractor<DataTable>
{
public DataTable ExecuteDSQuery(string myQuery)
{
return new DataTable();
}
}
public class DBInteractorJson : IDBInteractor<JsonString>
{
public JsonString ExecuteDSQuery(string myQuery)
{
return new JsonString();
}
}
我无法调用正确的方法。理想情况下,我会声明类似
SomeClass<DataTable> dt = new SomeClass<DataTable>();
SomeClass<JsonString> js = new SomeClass<JsonString>();
DataTable myDT = dt.ExecuteDSQuery(myQuery);
JsonString myJson = js.ExecuteDSQuery(myQuery);
我不确定如何声明 SomeClass。我知道我可以做类似的事情
public class SomeClass<T> where T : IDBInteractor <T>
{
public T ExecuteQuery(T dtobject, string myQuery)
{
return dtobject.ExecuteDSQuery(myQuery);
}
}
但我不想将对象实例 (dtobject) 传递给每个方法调用。
【问题讨论】:
-
为什么
DBInteractorJson的ExecuteDSQuery返回字符串?它应该返回JsonString -
比较
SomeClass<DataTable> dt = new SomeClass<DataTable>();和public class SomeClass<T> where T : IDBInteractor <T>。但是DataTable不是IDBInteractor <T>
标签: c# generics interface return-type