3

次のように、継承に最適な階層を理解しようとしています。これまでのところ、私は次のようにしています:

public interface IManager<T> where T : ISomeObject
{
    bool Add(T o);
    bool Remove(T o);
    bool Update(T o);
}

しかし、次に、各派生クラスにパラメーター化されたコンストラクターを持たせたいと思いました。だから私は行きました:

public abstract class Manager<T> : IManager<T> where T : ISomeObject
{
    protected readonly INeededObject obj;

    protected Manager(INeededObject o)
    {
         obj = o;
    }
}

この設計の問題についてどのようにすればよいかについてのアイデアはありますか?前もって感謝します。

4

2 に答える 2

5

あなたはほとんどそこにいます。基本クラスでもジェネリック型パラメーターを使用できます。

public abstract class Manager<T> : IManager<T> where T : ISomeObject
{
    protected readonly T obj;

    protected Manager(T o)
    {
         obj = o;
    }
}

次のように、パラメータ化された型も使用できます

protected Manager(IList<T> o)
{
    ...
}
于 2013-03-22T23:37:40.370 に答える
1

深夜の「知恵ラッシュ」のビットかもしれません (これも間違っている可能性があります)。しかし、次のように私のインターフェースを非汎用のものに変更しました:

public interface IManager
{
    bool Add(ISomeObject o);
    bool Remove(ISomeObject o);
    bool Update(ISomeObject o);
}

そして、私の抽象クラスは次のようになります。

public abstract class Manager<T> : IManager<T> where T : ISomeObject
{
    protected readonly INeededObject obj;

    protected Manager(INeededObject o)
    {
         obj = o;
    }

    public abstract bool Add(T o);
    bool IManager.Add(ISomeObject obj)
    {
        return this.Add( (T) obj );
    }
}
于 2013-04-12T09:00:55.210 に答える