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并且应该是可接受的返回值?
您的代码也会抛出另一个错误,这就是第二个错误存在的原因:
'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了方法名称的末尾.