通用接口的通用抽象基类

时间:2013-03-22 23:35:30

标签: c#-4.0 generics inheritance interface abstract-class

我试图了解哪种层次结构最适合继承,如下所述。到目前为止,我有以下几点:

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;
    }
}

关于如何解决这个设计问题的任何想法?提前谢谢。

2 个答案:

答案 0 :(得分:4)

你快到了。您也可以在基类中使用泛型类型参数。

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)
{
    ...
}

答案 1 :(得分:0)

可能是一个深夜'智慧匆忙'(这可能是错误的)。但修改我的界面是非通用的,如下所示:

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 );
    }
}