接口作为返回类型会产生问题

时间:2013-10-22 17:17:55

标签: c# interface

我在以下实现中有错误。它说OnlineWebStore_Process无法实现IWebStore接口,因为它们没有匹配的返回类型。但该方法返回Item,它实现了在IWebStore接口中用作返回类型的IItem接口。什么是这个问题的好方法?

public interface IItem
{
    string id { get; set; }
    string name { get; set; }
}

public interface IWebStore
{
    List<IItem> GetOnlineItems();
}

public class Item : IItem
{
    public Item(string _id)
    {
        id = _id;
    }

    public string id { get; set; }
    public string name { get; set; }
}

public class OnlineWebStore_Process : IWebStore
{
    public List<Item> GetOnlineItems()
    {
        List<Item> items = new List<Item>();

        return items
    }
}

4 个答案:

答案 0 :(得分:5)

public class OnlineWebStore_Process : IWebStore
{
    public List<IItem> GetOnlineItems()
    {
        List<IItem> items = new List<IItem>();

        return items;
    }
}

您的方法签名必须完全相同,您不能改为使用子类。如果你确实返回了一个子类,那么你将丢失一部分抽象,并且接口契约就会被破坏。

答案 1 :(得分:3)

GetOnlineItems()应返回List<IItem>

答案 2 :(得分:1)

public List<Item> GetOnlineItems()
{
    List<Item> items = new List<Item>();

    return items
}

这里返回List而不是List。这样您就没有实现IWebStore方法。这是正确的方法:

public List<IItem> GetOnlineItems()
{
    List<IItem> items = new List<IItem>();
    items.Add( new Item( "1" ) ); // Adding an instance, which implements the interface IItem

    return items;
}

答案 3 :(得分:0)

首先,您的方法签名必须相同。其次List<Item>不是List<IItems>的孩子,而是ItemIItem。它们是完全不同的类型。