假设我有一个基类
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()
。
我怎么能这样做?
答案 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>
接口,因此您不需要经常这样做。