我试图在类中实现(C#)接口方法,返回派生类型而不是接口中定义的基类型:
interface IFactory
{
BaseCar GetCar();
}
class MyFactory : IFactory
{
MyCar GetCar()
{
}
}
当然在哪里:
class MyCar : BaseCar
{
}
但是,会发生以下错误:
'MyFactory'没有实现接口成员'IFactory.GetCar()'。 'MyFactory.BaseCar()'无法实现IFactory.GetCar()',因为它没有匹配的返回类型'BaseCar'。
任何人都可以指出为什么会失败,以及如何解决这个问题的最佳方式?
答案 0 :(得分:21)
使用泛型
interface IFactory<T> where T: BaseCar
{
T GetCar();
}
class MyFactory : IFactory<MyCar>
{
MyCar GetCar()
{
}
}
class MyCar : BaseCar
{
}
答案 1 :(得分:11)
有两种方法可以实现这一目标。您可以使用泛型或显式实现接口成员。
泛型
interface IFactory<T> where T: BaseCar
{
T GetCar();
}
class MyFactory : IFactory<MyCar>
{
MyCar GetCar()
{
}
}
明确实施的成员
interface IFactory
{
BaseCar GetCar();
}
class MyFactory : IFactory
{
BaseCar IFactory.GetCar()
{
return GetCar();
}
MyCar GetCar()
{
}
}
答案 2 :(得分:4)
您的GetCar
方法必须返回BaseCar
才能实现该接口。正如错误所说,类'方法的返回类型必须与接口的方法的返回类型匹配。
没有什么可以阻止你创建MyCar
的实例,然后返回:
BaseCar GetCar()
{
return new MyCar();
}
另一种方法是,如果要获取新类的类型版本,则按照John's answer使用泛型。