我有3个数据库表,它们都有相同的5列。 它们的不同之处在于表#2和表#3中各有一个ID列。
我不想为此创建3个单独的类,但问题出在我的数据库帮助器类中我有一个加载类的方法,如:
public static LoadClass1(SqlDataReader reader)
{
Class1 c1 = new Class1();
c1.prop1 = (int)reader["prop1"]
}
我不想创建3个单独的加载助手方法,并且必须在所有这些方法上复制代码。 (我不介意创建3,但只需设置每个字段不同的字段)。
答案 0 :(得分:3)
四种方法:一种加载核心字段,另外三种调用核心方法并加载额外字段。这对于具有核心属性和3个子类的基类来说效果最好。
//Psuedo code, obviously not exact
//Don't hate
public abstract class Core
{
int field1;
int field2;
int field3;
int field4;
int field5;
}
public class Sub1 : Core
{
field 6;
}
...
public static void LoadCore(Core c, DataTable dt)
{
c.field1 = dt.getField1(); //Really a database value
c.field2 = dt.getField2();
c.field3 = dt.getField3();
c.field4 = dt.getField4();
c.field5 = dt.getField5();
}
public static Sub1 LoadSub1()
{
Sub1 s = new Sub1();
LoadCore(s, MY_DATA_TABLE);
s.field6 = MY_DATA_TABLE.getField6();
}
答案 1 :(得分:1)
您可以创建一个包含所有公共字段的基类,然后使用其他类来扩展包含额外字段的基类。
我的想法是
class MyBase
{
public MyBase()
{
// load the base class stuff.
}
int f1;
int f2;
int f3;
int f4;
int f5;
}
class MyClass2 : MyBase
{
public MyClass2() : base()
{
// load the MyClass2 f6
}
int f6;
}
class MyClass3 : MyBase
{
public MyClass3() : base()
{
// load the MyClass3 f7
}
int f7;
}
答案 2 :(得分:1)
您可以通过带有BaseTableName属性的GetSchemaTable获取表名,并相应地检索您的字段。
答案 3 :(得分:0)