如果我的接口(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
    }
}

如果没有,为什么不呢?

至少对我来说,这是有道理的。

最佳答案

当然,您可以自由地返回IEnumerable<Part>的任何实现作为GetParts方法的实现细节(例如Train可以轻松返回List<Part>)。但是方法签名必须在接口(interface)定义和该方法的类实现之间完全匹配。

这里(与重载不同)方法签名包括方法的返回类型。所以不,您不能按照所示或类似内容编写Car。您当然可以自由使用GetParts方法,该方法的确返回List<Part>,但不满足接口(interface)要求-您可以选择为其提供显式实现:

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

关于c# - 将集合类型从接口(interface)更改为实现类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53648809/

10-10 18:13