我在以下实现中有错误。它说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
}
}
答案 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>
的孩子,而是Item
和IItem
。它们是完全不同的类型。