私はいくつかのクラスのデータ層を設計しています。これらのクラスのそれぞれが、私が設定した契約に従うことを望んでいます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;
}
}
エラーはすべて 2 番目のクラスMyDataItem
(私の基本クラス) にあります。
- タイプまたはネームスペース名 'T' が見つかりませんでした - クラスを宣言する最初の行にあります。
where
署名に句を追加して、エラーを削除しようとしました。
public class MyDataItem : IMyDataItem<T> where T : MyDataItem {
ただし、これにより次のエラーが表示されました。
- 非ジェネリック宣言では制約を使用できません
私が求めていることを行う方法はありますか、またはより単純なクラス設計に固執する必要がありますか?
基本クラスが完成すると、Location、Employee、Recordなどの他のクラスがそれを継承します。