1

同様の問題を見つけることができませんでしたが、見逃した場合はお気軽にリダイレクトしてください。リポジトリ パターンに慣れようとしています。

うまく動作しないようにしようとしているコードの例を示します。これらは、私が使用しているエンティティを表すクラスとインターフェースです。

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 に変換することは不可能であるというコンパイル時エラーが発生しました。助けてくれてありがとう!

4

1 に答える 1