我正在为几个类设计一个数据层,我希望这些类中的每一个都遵循我建立的合同IMyDataItem
:
public delegate void ItemChangedHandler(object sender, EventArgs e);
public interface IMyDataItem<T> {
string Insert { get; }
int Save();
string Select { get; }
string Update { get; }
}
完成后,我现在想包含一个基类,我的其他类都继承自该基类。
我将如何修复这个基类?
public class MyDataItem : IMyDataItem<T> {
private const string TODO = "TODO: This has not been done.";
public const int NOT_SET = -1;
private bool changed;
internal int rowId;
public MyDataItem() {
changed = false;
rowId = NOT_SET;
}
public ItemChangedHandler OnChange;
internal void notify() {
changed = true;
if (OnChange != null) {
OnChange(this, new EventArgs());
}
}
public int RowID {
get { return rowId; }
set {
if (rowId != value) {
rowId = value;
notify();
}
}
}
public bool SaveNeeded { get { return changed; } }
public static virtual T Load() {
return default(T);
}
public virtual string Insert { get { return TODO; } }
public virtual string Select { get { return TODO; } }
public virtual string Update { get { return TODO; } }
public virtual int Save() {
changed = false;
return NOT_SET;
}
}
错误都在第二类MyDataItem
(我的基类)中:
- 找不到类型或命名空间名称“T” - 在我声明我的类的第一行。
我尝试通过where
在签名中添加一个子句来消除错误:
public class MyDataItem : IMyDataItem<T> where T : MyDataItem {
但是,这给我带来了错误:
- 非泛型声明不允许使用约束
有没有办法做我所追求的,还是我需要坚持更简单的类设计?
基类完成后,其他类如Location、Employee和Record将继承它。