簡體   English   中英

將集合類型從接口更改為實現類

[英]Changing Collection type from Interface to Implementing class

如果我有一個返回某個集合的方法的接口,是否可以返回集合類型的實現?

例如:

public interface IVehicle
{
    IEnumerable<Part> GetParts(int id);
}

public class Car : IVehicle
{
    List<Part> GetParts(int id)
    {
        //return list of car parts
    }
}

public class Train : IVehicle
{
    IEnumerable<Part> GetParts(int id)
    {
        //return IEnumerable of train parts
    }
}

如果沒有,為什么不呢?

至少對我而言,這是有道理的。

您當然可以自由地返回IEnumerable<Part>任何實現作為GetParts方法的實現細節(例如, Train可以輕松返回List<Part> )。 但是方法簽名必須在接口定義和該方法的類實現之間精確匹配。

這里(與例如重載不同)方法簽名包括方法的返回類型。 所以不,你不能像所示或類似的東西寫Car 你當然可以自由擁有GetParts方法確實返回一個List<Part> ,但不會滿足接口要求-你可以選擇為替代提供一個明確的實現:

public class Car : IVehicle
{
    List<Part> GetParts(int id)
    {
        //return list of car parts
    }
    IEnumerable<Part> IVehicle.GetParts(int id) => this.GetParts(id);
}

不,C#不支持繼承方法返回類型的協方差。

C#是否支持返回類型協方差?

暫無
暫無

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

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