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)
如果没有,为什么不呢?
至少对我而言,这是有道理的.
您当然可以自由地返回任何实现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)