I have a Data access library which I would like to return different data formats (XML, Json, DataTable). I was trying to use Generics to achieve this.
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();
}
}
I am having trouble invoking the correct method. Ideally I would to declare something like
SomeClass<DataTable> dt = new SomeClass<DataTable>();
SomeClass<JsonString> js = new SomeClass<JsonString>();
DataTable myDT = dt.ExecuteDSQuery(myQuery);
JsonString myJson = js.ExecuteDSQuery(myQuery);
I’m not sure how to declare SomeClass. I know I could do something like
public class SomeClass<T> where T : IDBInteractor <T>
{
public T ExecuteQuery(T dtobject, string myQuery)
{
return dtobject.ExecuteDSQuery(myQuery);
}
}
But I don’t want to have to pass an object instance (dtobject) to each method call.
What exactly are you trying to do? This code works fine: