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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BaseClass无法实现interface.variable,因为它没有匹配的返回类型相关的知识,希望对你有一定的参考价值。

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

我正在使用接口和多态来处理以下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关键字,当然这应该表明我希望封装基类并定义新的变量类型?

答案

尝试通用接口 - IFile<T>。然后ICommandFile实施IFile<CommandLine>.得到这个想法?

另一答案

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

另一答案

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

列表[ICommandFile]内容EQUALS!?不,{get; set;}!

更改:

new List [ICommandFileLine] Contents = new ListICommandFileLine;

在我的本地代码中:

新列表[ICommandFileLine]内容{get; set;}

多么尴尬...

我对于实现接口和不时犯这些错误仍然相对较新。

以上是关于BaseClass无法实现interface.variable,因为它没有匹配的返回类型的主要内容,如果未能解决你的问题,请参考以下文章

错误 C2504:'BASECLASS':基类未定义

为啥 sizeof(BaseClass) == sizeof(DerivedClass) 虽然我添加了一个成员

C# 泛型方法约束为继承自某类时,调用方法,传子类实参,为什么报错?应该怎么写

在 if 逻辑中调用同一接口和实现的 Autofac 多个实现

将 List<SubClass> 转换为 List<BaseClass> 的最有效方法

WinForm BaseClass类常用通用方法