У меня есть библиотека доступа к данным, в которую я хотел бы возвращать различные форматы данных (XML, Json, DataTable). Я пытался использовать Generics для достижения этой цели.
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) каждому вызову метода.