Chcę sobie napisać klasę abstrakcyjną, po której dziedziczyć będą wszystkie klasy reprezentujące tabele w bazie. Chcę, żeby każda klasa reprezentująca miała:
public static List<T> GetListOfItems()
public static List<T> GetItem(int id)
np:
class User : DBClass<Users>
{}
...
void function()
{
User u = User.GetItem(1);
List<User> list = User.GetListOfItems();
}
napisałem takie coś:
public abstract class DBClass<T> where T : class
{
public static List<T> GetListOfItems()
{
List<T> list = new List<T>();
DBParser db = new DBParser();
db.Command.CommandText = **select command1**
DataSet ds = new DataSet();
db.DataAdapter.Fill(ds);
if (ds.Tables.Count == 1)
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
list.Add(**method 1(DataRow dr)**);
}
}
return list;
}
protected static T GetItem(int id)
{
DBParser db = new DBParser();
db.Command.CommandText = **select command 2**
db.Command.Parameters.Add(new System.Data.SqlClient.SqlParameter("ID", id));
DataSet ds = new DataSet();
db.DataAdapter.Fill(ds);
T obj = null;
if(ds.Tables.Count == 1 && ds.Tables[0].Rows.Count == 1)
obj = **method 1(DataRow dr**
return obj;
}
Jedyne, czym różniłyby się te metody w każdej z klas T to(oprócz typu) select command 1 i 2.
Za method 1(DataRow dr można by dać
new T(DataRow dr)
, gdyby jakoś można było zadeklarować, że klasa zawsze ma taki konstruktor. Mogłoby to być też T.GetItem(DataRow dr)
, ale nijak nie wiem jak to (i czy w ogóle da się)zapisać.
Chciałbym mieć 2 pola static const w każdej z klas T(a właściwie chciałbym żeby ich implementacja była wymuszona) dla select command 1 i 2.