![](/img/trans.png)
[英]Force a class implementing interface A to also inherit from a type derived from interface B
[英]Changing Collection type from Interface to Implementing class
如果我有一個返回某個集合的方法的接口,是否可以返回集合類型的實現?
例如:
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>
)。 但是方法簽名必須在接口定義和該方法的類實現之間精確匹配。
這里(與例如重載不同)方法簽名包括方法的返回類型。 所以不,你不能像所示或類似的東西寫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);
}
不,C#不支持繼承方法返回類型的協方差。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.