在实现中覆盖接口方法返回类型和派生类

我试图在类中实现(C#)接口方法,返回派生类型而不是接口中定义的基类型:

interface IFactory { BaseCar GetCar(); } class MyFactory : IFactory { MyCar GetCar() { } } 

当然,在哪里:

 class MyCar : BaseCar { } 

但是,发生以下错误:

‘MyFactory’没有实现接口成员’IFactory.GetCar()’。 ‘MyFactory.BaseCar()’无法实现IFactory.GetCar()’,因为它没有匹配的返回类型’BaseCar’。

任何人都可以指出我为什么失败了,如何解决它的最佳方法?

使用generics

 interface IFactory where T: BaseCar { T GetCar(); } class MyFactory : IFactory { MyCar GetCar() { } } class MyCar : BaseCar { } 

有两种方法可以实现这一目标。 您可以使用generics或显式实现接口成员。

generics

 interface IFactory where T: BaseCar { T GetCar(); } class MyFactory : IFactory { MyCar GetCar() { } } 

明确实施的成员

 interface IFactory { BaseCar GetCar(); } class MyFactory : IFactory { BaseCar IFactory.GetCar() { return GetCar(); } MyCar GetCar() { } } 

您的GetCar方法必须返回BaseCar才能实现该接口。 正如错误所说,类’方法的返回类型必须与接口方法的返回类型匹配。

没有什么可以阻止你创建一个MyCar实例,然后返回:

 BaseCar GetCar() { return new MyCar(); } 

如果你想获得新类的类型版本,另一种方法是根据John的答案使用generics。