将继承与泛型一起使用

时间:2013-04-14 15:46:18

标签: c# generics inheritance interface

假设我有一个基类

class Document
{
//some properties
}

和 两个派生类:

public class Order:Document
    {
    //some properties   
    }
public class Request:Document
{
    //some properties   
}

现在我想创建一个具有服务层的分层应用程序。我也想要一个基本的服务层接口,如:

public interface IBaseService<T> where T:Document
{
    IList<T> GetAll();
}

我的图层服务类实现它:

public SaleService:IBaseService<Document>;

所以我必须定义IList<Document> GetAll()来实现基本服务,但我希望我的SaleService有IList<Order> GetAll()IList<Request> GetAll()方法,而不是IList<Document> GetAll()。 我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

您需要使用不同的通用参数明确实现IBaseService<T>

public class SalesService : IBaseService<Order>, IBaseService<Request>
{
    IList<Order> IBaseService<Order>.GetAll()
    {
        //return orders
    }

    IList<Request> IBaseService<Request>.GetAll()
    {
        //return requests
    }
}

只有通过界面才能看到已实现的方法,因此您必须强制转换它们,例如

IBaseService<Request> service = new SalesService();
IList<Request> request = service.GetAll();

您的客户端代码应仅依赖于IBaseService<T>接口,因此您不需要经常这样做。