小编Dan*_*iel的帖子

返回派生类型时"未实现接口"

以下代码:

public interface ISomeData
{
    IEnumerable<string> Data { get; }
}

public class MyData : ISomeData
{
    private List<string> m_MyData = new List<string>();
    public List<string> Data { get { return m_MyData; } }
}
Run Code Online (Sandbox Code Playgroud)

产生以下错误:

错误CS0738:'InheritanceTest.MyData'未实现接口成员'InheritanceTest.ISomeData.Data'.'InheritanceTest.MyData.Data'无法实现'InheritanceTest.ISomeData.Data',因为它没有匹配的返回类型'System.Collections.Generic.IEnumerable'.

由于List <T>实现了IEnumerable <T>,因此可以认为我的类将实现该接口.有人可以解释一下这个不编译的理由是什么吗?

我可以看到,有两种可能的解决方案:

  1. 将接口更改为更具体,并要求实现IList.
  2. 更改我的类(MyData)以返回IEnumerable并实现原始接口.

现在假设我也有以下代码:

public class ConsumerA
{
    static void IterateOverCollection(ISomeData data)
    {
        foreach (string prop in data.MyData)
        {
            /*do stuff*/
        }
    }
}

public class ConsumerB
{
    static void RandomAccess(MyData data)
    {

        data.Data[1] = "this line is invalid if MyPropList …
Run Code Online (Sandbox Code Playgroud)

c#

39
推荐指数
3
解决办法
7000
查看次数

标签 统计

c# ×1