【发布时间】:2010-02-01 04:13:15
【问题描述】:
我有许多反映数据库中表的类。我想要一个具有一些基本功能的基类(例如,它会有一个“isDirty”标志),以及一个包含列名的静态字符串数组,它们出现在数据库中。以下代码不起作用,但说明了我想做的事情:
public class BaseRecord {
public bool isDirty;
public object [] itemArray;
public static string [] columnNames;
}
public class PeopleRec : BaseRecord {
}
public class OrderRec : BaseRecord {
}
public static void Main() {
PeopleRec.columnNames = new string[2];
PeopleRec.columnNames[0]="FIRST_NAME";
PeopleRec.columnNames[1]="LAST_NAME";
OrderRec.columnNames = new string[4];
OrderRec.columnNames[0] = "ORDER_ID";
OrderRec.columnNames[1] = "LINE";
OrderRec.columnNames[2] = "PART_NO";
OrderRec.columnNames[3] = "QTY";
}
public class DoWork<T> where T : BaseRecord {
public void DisplayColumnNames() {
foreach(string s in T.columnNames)
Console.Write("{0}", s);
}
public void DisplayItem(T t) {
for (int i=0; i<itemValues.Length; i++) {
Console.Write("{0}: {1}",t.columnNames[i],t.itemValues[i])
}
}
}
我希望每个派生类都有自己的数据库列名字符串的静态数组,并且我希望通用类无需实例即可访问此静态成员。
但它不起作用:
(A) columnNames 是 BaseRec、PeopleRec 和 OrderRec 中相同的数组。我不能让 columnNames 不同。 BaseRec.columnNames.Length 将为 3,因为 OrderRec 中的 columnNames 是最后初始化的。
(B) 符号 T.columnNames 无法编译。
关于如何解决这个问题的任何想法?
【问题讨论】:
标签: c# inheritance static