2013-03-05 163 views
0

我試圖做的實體框架類生成的類的一些抽象和具有如下所示的設置:與集合實現接口和泛型

EntityClassA (Generated) 
{ 
    EntityCollection<EntityClassB> EntityClassBs; 
} 

EntityClassB (Generated) 
{ 
    (...) 
} 

Partial EntityClassA : InterfaceA 
{ 
    (...) 
} 


Partial ClassB : InterfaceB 
{ 
    (...) 
} 

InterfaceA 
{ 
    IEnumerable<InterfaceB> EntityClassBs; 
} 

,但我不斷收到問題說EntityClassA沒有正確實現,因爲返回類型在EntityClassBs上不匹配。

更新:我的歉意,我不打算在這個狀態下提交這個問題。更新的例子包括適當的interfaceA屬性名稱和更詳細的解釋。請記住,這只是一個例子,術語不代表實際名稱。

我想要做的是我有一個wpf控件類庫和數據庫。 WPF庫引用數據庫中的一個類用於構建自定義表。所以我試圖通過使用Interfaces來獲取數據包的依賴。有沒有一種方法可以像這樣進行,還是有一種更推薦的方式?

我所看到的是我需要完全匹配接口屬性的簽名,並且我不能實現類似的接口。

+2

什麼是返回類型?接口必須完全匹配類型,不能使用子類型。 – 2013-03-05 14:34:30

+0

這是因爲在你的'InterfaceA'' IEnumerable '包含一個'interface',但'TEntity'必須是'class'。 – 2013-03-05 14:36:41

+0

這裏是你的答案:http://stackoverflow.com/questions/2606461/problem-with-interface-implementation-in-partial-classes – 2013-03-05 14:37:12

回答

1

我想我明白你正在嘗試做的。可能不是改變簽名(不能做),你可以嘗試添加另一個屬性,它只返回相同的屬性,但帶有你要找的簽名。

Partial EntityClassA : InterfaceA 
{ 
    IEnumerable<InterfaceB> CollectionEntityClassBs 
    { 
     get{ return (some cast or somthin)EntityClassBs; } 
    } 
} 

InterfaceA 
{ 
    IEnumerable<InterfaceB> CollectionEntityClassBs; 
} 
+0

這似乎工作但你認爲這是一個抽象的好方法嗎? – 2013-03-05 15:28:04

+0

我這樣做的方式是製作我想要的簽名的新集合,並添加我在舊列表中的項目。我無法做任何事情喜歡收集 =新集合(集合)。 – 2013-03-05 15:40:57

+0

如果類b實現interfaceB,是否還有辦法執行類似於集合 =新集合(集合)? – 2013-03-05 15:54:57

1

你不問一個問題,也不給你什麼回報你使用任何類型的細節,所以根據你的陳述,我會假裝你要做到這一點:

Partial EntityClassA : InterfaceA 
{ 
    IEnumerable<ClassB> IClassBs {get; set;} 
} 

Partial ClassB : InterfaceB 
{ 
    (...) 
} 

InterfaceA 
{ 
    IEnumerable<InterfaceB> IClassBs; 
} 

這是無效的。 InterfaceA接口指定IClassBs(順便說一句,命名不清的屬性)會返回一個集合,如果InterfaceB s。更改方法簽名返回集合ClassB s與接口定義不匹配。

請注意,您可以在不改變的返回類型返回ClassB秒的實際列表:

Partial EntityClassA : InterfaceA 
{ 
    IEnumerable<InterfaceB> IClassBs 
    { 
     get 
     { 
      return new List<InterfaceB>() {new ClassB()}; 
     } 
    } 
}