继承接口为返回类型-无法转换表达式
本文关键字:转换 表达式 接口 返回类型 继承 | 更新日期: 2024-09-20 02:32:30
我有以下
public interface IAwesomeInterface
{
string Prop1 {get; set;}
string Prop2 {get; set;}
List<SomeObject> GetObjects();
}
public abstract class AbstractObject : IAwesomeInterface
{
public string Prop1 {get; set;}
public string Prop2 {get; set;}
public abstract List<SomeObject> GetObjects();
}
public class ConcreteObject1 : AbstractObject
{
public List<SomeObject> GetObjects()
{
return new List<SomeObject>();
}
}
public class ConcreteObject2 : AbstractObject
{
public List<SomeObject> GetObject()
{
//do some other stuff
return new List<SomeObject>();
}
}
以及的实现
public class ObjectFactory
{
public IAwesomeInterface GetObject()
{
return new ConcreteObject1();
}
}
我收到一个错误,"无法将表达式类型ConcreteObject1转换为返回类型IAwesomeInterface"
由于ConcreteObject1继承自AbstractObject,这不意味着它实现了IAwesomeInterface,并且应该是一个可接受的返回值吗?
您的代码还会抛出另一个错误,这就是存在第二个错误的原因:
"ConcreteObject1"未实现继承的抽象成员"AbstractObject.GetObjects()"
修复这个,你引用的那个也会消失。为此,在ConcreteObject1
和ConcreteObject2
:中的GetObjects()
方法旁边添加override
public class ConcreteObject1 : AbstractObject
{
public override List<SomeObject> GetObjects()
{
return new List<SomeObject>();
}
}
public class ConcreteObject2 : AbstractObject
{
public override List<SomeObject> GetObjects()
{
//do some other stuff
return new List<SomeObject>();
}
}
PS。您的代码在GetObjects
方法名称中有一个拼写错误。您在方法名称末尾遗漏了s
。