BaseClass无法实现interface.variable,因为它没有匹配的返回类型

时间:2017-12-28 08:40:17

标签: c# inheritance interface polymorphism encapsulation

编辑:已解决。我有时候是个白痴。请参阅下面的自我回答...

我正在使用接口和多态

开发以下C#.Net4.5代码
public interface IFile
{
    List<string> Contents {get;set;}
}

public class File : IFile
{
    public List<string> Contents {get;set;}
}
public interface ICommandFile : IFile
{
    new List<ICommandFileLine> Contents {get;set;} /*ICommandFileLine is defined in the code as well, but I don't believe this is pertinent to the issue I am having.*/
}

public class CommandFile : File, ICommandFile
{
    public new List<ICommandFileLine> Contents {get;set;}
}

当我尝试执行上述操作时,预编译器会抱怨:

  

CommandFile没有实现接口memeber   “ICommandFile.Contents”。 'File.Contents'无法实现   “ICommandFile.Contents”因为它没有匹配的返回值   类型“List [ICommandFileLine]”

     

接口成员“List ICommandFile.Contents”不是   实现。

我不明白。我正在使用new关键字,当然这应该表明我希望封装基类并定义新的变量类型?

3 个答案:

答案 0 :(得分:1)

尝试通用界面 - IFile<T>。然后ICommandFile实现了IFile<CommandLine>.获得想法?

答案 1 :(得分:0)

接口成员实现不应该像在CommandFile类中那样标记为“new”,这意味着实现类中的成员与从接口继承的成员无关。

答案 2 :(得分:-1)

在发布后5分钟我意识到自己做错了什么:

列表[ICommandFile]目录 EQUALS!?不, {get; set;}

更改:

new List [ICommandFileLine] Contents = new ListICommandFileLine;

在我的本地代码中:

new List [ICommandFileLine] Contents {get; set;}

多么尴尬......

我实施界面并不时犯这些错误仍然相对较新。