0

次の実装に誤りがあります。一致する戻り値の型がないため、OnlineWebStore_Process はインターフェイス IWebStore を実装できないと言われています。ただし、このメソッドは、IWebStore インターフェイスで戻り値の型として使用される IItem インターフェイスを実装する Item を返します。この問題の良い解決策は何ですか?

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

4 に答える 4

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

        return items;
    }
}

メソッドのシグネチャはまったく同じでなければなりません。代わりにサブクラスを使用することはできません。サブクラスを返すと、抽象化の一部が失われ、インターフェイス コントラクトが壊れます。

于 2013-10-22T17:20:55.263 に答える
3

GetOnlineItems() は返す必要がありますList<IItem>

于 2013-10-22T17:21:14.423 に答える
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;
}
于 2013-10-22T17:26:48.003 に答える
0

まず、メソッドのシグネチャが同じである必要があります。そして 2 番目はlike andList<Item>の子ではありません。彼らは全く異なるタイプです。List<IItems>ItemIItem

于 2013-10-22T17:27:34.590 に答える