将集合类型从接口更改为实现类

Jes*_*ard 4 c# oop collections ienumerable interface

如果我有一个返回某个集合的方法的接口,是否可以返回集合类型的实现?

例如:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有,为什么不呢?

至少对我而言,这是有道理的.

Dam*_*ver 5

您当然可以自由地返回任何实现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);
}
Run Code Online (Sandbox Code Playgroud)