0

假设我有一个基类

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()。我该怎么做?

4

1 回答 1

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>接口,因此您不需要经常这样做。

于 2013-04-14T15:54:58.717 回答