2013-10-22 65 views
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 
    } 
} 
+2

爲什麼你不改變它,所以它返回一個列表? –

+2

另一件事 - 所有的財產名稱都以大寫字母開頭的慣例。你的物業應該是ID和名稱 –

+0

我現在改變了它,它的工作原理。謝謝。另外,我會將屬性名稱更改爲大寫字母。 –

回答

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

     return items; 
    } 
} 

你的方法簽名必須是完全一樣的,你不能把一個子類來代替。如果你確實返回了一個子類,那麼你就失去了抽象的一部分,並且接口契約被破壞了。

+0

與OP的代碼一樣,在return語句結尾處缺少';'。 – abelenky

+0

item.Add(new Item(id))給列表提供了一個問題。它說它不能將Item轉換爲IItem。 –

+0

@KasperHansen:你的'清單'必須是'List '。看看'IWebstore'中的定義。 @Abelenky:歡呼。 –

3

GetOnlineItems()應該返回List<IItem>

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

    return items 
} 

在這裏你返回,而不是名單列表。這樣你就沒有實現你的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; 
} 
+0

該Item構造函數需要一個字符串。 :-) – LarsTech

+0

LarsTech,你當然是對的。 :) – JustAndrei

0

首先你的方法簽名需要是相同的。其次List<Item>不是List<IItems>的子項,如ItemIItem。他們是完全不同的類型。