iDP*_*WF1 19 c# polymorphism interface
我试图在类中实现(C#)接口方法,返回派生类型而不是接口中定义的基类型:
interface IFactory
{
BaseCar GetCar();
}
class MyFactory : IFactory
{
MyCar GetCar()
{
}
}
Run Code Online (Sandbox Code Playgroud)
当然在哪里:
class MyCar : BaseCar
{
}
Run Code Online (Sandbox Code Playgroud)
但是,会发生以下错误:
'MyFactory'没有实现接口成员'IFactory.GetCar()'.'MyFactory.BaseCar()'无法实现IFactory.GetCar()',因为它没有匹配的返回类型'BaseCar'.
任何人都可以指出我为什么会失败,如何解决它的最佳方法?
Joh*_*ock 22
使用泛型
interface IFactory<T> where T: BaseCar
{
T GetCar();
}
class MyFactory : IFactory<MyCar>
{
MyCar GetCar()
{
}
}
class MyCar : BaseCar
{
}
Run Code Online (Sandbox Code Playgroud)
小智 11
有两种方法可以实现这一目标.您可以使用泛型或显式实现接口成员.
泛型
interface IFactory<T> where T: BaseCar
{
T GetCar();
}
class MyFactory : IFactory<MyCar>
{
MyCar GetCar()
{
}
}
Run Code Online (Sandbox Code Playgroud)
明确实施的成员
interface IFactory
{
BaseCar GetCar();
}
class MyFactory : IFactory
{
BaseCar IFactory.GetCar()
{
return GetCar();
}
MyCar GetCar()
{
}
}
Run Code Online (Sandbox Code Playgroud)
您的GetCar方法必须返回 aBaseCar才能实现该接口。正如错误所说,类的方法的返回类型必须与接口的方法的返回类型匹配。
没有什么可以阻止您创建 的实例MyCar,然后返回:
BaseCar GetCar()
{
return new MyCar();
}
Run Code Online (Sandbox Code Playgroud)
如果您想获得新类的类型化版本,另一种方法是按照John 的回答使用泛型。