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

Mik*_*ike 1 c# inheritance interface

我有以下内容

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>();
    }
}
Run Code Online (Sandbox Code Playgroud)

并实施:

public class ObjectFactory
{

    public IAwesomeInterface GetObject()
    {

        return new ConcreteObject1();
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,"无法将表达式类型ConcreteObject1转换为返回类型IAwesomeInterface"

由于ConcreteObject1继承自AbstractObject,这是否意味着它实现了IAwesomeInterface并且应该是可接受的返回值?

Mar*_*zek 6

您的代码也会抛出另一个错误,这就是第二个错误存在的原因:

'ConcreteObject1'没有实现继承的抽象成员'AbstractObject.GetObjects()'

修复这个,你引用的那个也会消失.为此,请在两者中添加方法override旁边的 和:GetObjects()ConcreteObject1ConcreteObject2

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>();
    }
}
Run Code Online (Sandbox Code Playgroud)

PS.您的代码在GetObjects方法名称中有拼写错误.您错过s了方法名称的末尾.