2013-03-05 128 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()}; 
     } 
    } 
}