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