使用集合和泛型实现接口

时间:2013-03-05 14:31:09

标签: c# entity-framework collections interface

我正在尝试在实体框架类生成的类中进行一些抽象,并且具有如下设置:

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

EntityClassB (Generated)
{
   (...)
}

Partial EntityClassA : InterfaceA
{
   (...)
}


Partial ClassB : InterfaceB
{
   (...)
}

InterfaceA
{
   IEnumerable<InterfaceB> EntityClassBs;
}

但我一直在收到有关EntityClassA无法正确实现的问题,因为返回类型与EntityClassBs不匹配。

更新:道歉,我不打算在这种状态下提交此问题。更新示例以包含正确的interfaceA属性名称和更详细的说明。请记住,这只是一个例子,命名法并不代表实际名称。

我想要做的是我有一个wpf控件的类库和一个数据库。 WPF库引用它用于构造自定义表的一个类的数据库。所以我试图通过使用Interfaces来依赖数据包。有没有办法可以这样做,还是有更推荐的方式?

我所看到的是我需要完全匹配接口属性的签名,我无法实现这样的接口。

2 个答案:

答案 0 :(得分:1)

您不会提出问题,也不会提供有关您使用的退货类型的任何详细信息,因此根据您的陈述,我会假装您尝试这样做:

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

Partial ClassB : InterfaceB
{
   (...)
}

InterfaceA
{
   IEnumerable<InterfaceB> IClassBs;
}

无效。 InterfaceA接口指定IClassBs(顺便说一下,命名不佳的属性)返回InterfaceB s的集合。更改方法 signature 以返回ClassB的集合与接口定义不匹配。

请注意,您可以在不更改返回类型的情况下返回ClassB的实际列表:

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

答案 1 :(得分:1)

我想我明白你要做什么。也许您可以尝试添加另一个只返回相同属性但具有您要查找的签名的属性,而不是更改签名(无法执行)。

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

InterfaceA
{
   IEnumerable<InterfaceB> CollectionEntityClassBs;
}