继承接口为返回类型-无法转换表达式

本文关键字:转换 表达式 接口 返回类型 继承 | 更新日期: 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()"

修复这个,你引用的那个也会消失。为此,在ConcreteObject1ConcreteObject2:中的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