簡體   English   中英

與泛型一起使用繼承

[英]using Inheritance with generics

假設我有一個基礎課

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

您將需要使用不同的通用參數顯式實現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>接口,因此您不需要經常這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM