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

4

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

例如:

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
    }
}

如果不是这样,为什么呢?

至少对我来说,这很有意义。


1
这段代码编译通过了吗? - Chetan
奇怪的是,我可以看到这方面的用例,不过也许C#有不同的语法可以实现这个? - Jessica
2个回答

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);
}

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接