簡體   English   中英

C#中的通用接口

[英]Generic interface in C#

我有一個通用接口,我想約束這個泛型參數可以接受的類型。 這是界面:

public interface IBaseRequestRepository<T> where T : IRequestPackage,
       IRequestDynamicPackage, IRequestHotelOnly, IRequestFlightOnly 
{ 
        IList GetByOccupancyAndTravelDate(int occupancyId, int travelBegYear,
                                          int travelBegDate, int travelEndYear,
                                          int travelEndDate); 
}

但是這給出了一個錯誤:

錯誤1類型'IRequestPackage'不能在泛型類型或方法'IBaseRequestRepository'中用作類型參數'T'。 沒有從'IRequestPackage'到'IRequestFlightOnly'的隱式引用轉換。

有什么建議么?

您需要滿足所有通用約束,而不僅僅是一個。

因此,您無法將IRequestPackage替換為T因為它不是從所有其他接口派生的。

您可以傳入從您指定為約束的所有接口繼承的接口類型或實現所有這些接口的類類型。

錯誤消息表明IRequestPackage不從IRequestFlightOnly繼承 - 是嗎?

請注意,where子句是AND關系,而不是OR - 所以你的where子句是T必須實現ALL

  • IRequestPackage,
  • IRequestDynamicPackage
  • IRequestHotelOnly,
  • IRequestFlightOnly

看起來你想要一個IRequest接口或RequestBase抽象類;)

您應該使用實現約束指定的所有接口的類型,而不僅僅是其中之一。 它是“AND”,而不是“OR”......

您應該重新考慮類型約束和程序結構。 看起來您缺少基本接口或抽象基類。

暫無
暫無

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

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