同様の問題を見つけることができませんでしたが、見逃した場合はお気軽にリダイレクトしてください。リポジトリ パターンに慣れようとしています。
うまく動作しないようにしようとしているコードの例を示します。これらは、私が使用しているエンティティを表すクラスとインターフェースです。
public class AbsObj
{
public string Code { get; set; }
}
public interface IAbsObj
{
bool Save();
}
public class User : AbsObj
{
public string Language{get; set;}
}
public class DbUser : User, IAbsObj
{
public bool Save()
{
return true;
}
}
次に、リポジトリ インターフェイスへ
public interface IRepository<T>
{
void Add(T value);
void Update(T value);
void Delete(T value);
}
汎用リポジトリ
public class Repository<T> : IRepository<T> where T : AbsObj, IAbsObj
{
protected List<T> _lst;
public Repository()
{
_lst = new List<T>();
}
public void Add(T value)
{
}
public void Update(T value)
{
}
public void Delete(T value)
{
}
public bool Save()
{
for (int i = 0; i < _lst.Count; i++)
{
_lst[i].Save();
}
return true;
}
}
次に、データベースからのユーザーのロードを処理する、より具体的なリポジトリ:
public class UserRepository<T> : Repository<T> where T : AbsObj, IAbsObj
{
public void Load()
{
DbUser us = new DbUser();
us.Code = "Cod";
us.Language = "IT";
_lst.Add(us);
}
}
DBUser クラスを作成したのは、将来、別のタイプの保存を処理する XMLUser を自由に作成できるようにするためです。AbsObj から継承する User から継承します。IAbsObj を実装しています。それにもかかわらず、DbUser オブジェクトが作成したリストに追加しようとすると、DBUser から T に変換することは不可能であるというコンパイル時エラーが発生しました。助けてくれてありがとう!