用集合和泛型实现接口

本文关键字:实现 接口 泛型 集合 | 更新日期: 2023-09-27 18:02:14

我试图在实体框架类生成的类中做一些抽象,并有如下设置:

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

Partial EntityClassA : InterfaceA
{
   (...)
}

Partial ClassB : InterfaceB
{
   (...)
}
InterfaceA
{
   IEnumerable<InterfaceB> EntityClassBs;
}

但我一直得到的问题说,EntityClassA不正确实现,因为返回类型不匹配entityclassb。

UPDATE:对不起,我不是故意在这个状态下提交这个问题的。更新示例,包括适当的接口属性名称和更详细的解释。请记住,这只是一个示例,命名法并不代表实际名称。

我想做的是我有一个wpf控件类库和一个数据库。WPF库引用用于构造自定义表的一个类的Data库。所以我想做的就是通过使用接口来减少对数据包的依赖。有办法我可以继续这样做,或者有一个更推荐的方式?

我看到的是我需要完全匹配接口属性的签名,而我不能实现这样的接口

用集合和泛型实现接口

我想我明白你想做什么。也许你可以尝试添加另一个属性,而不是改变签名(不能这样做),它只返回相同的属性,但带有你正在寻找的签名。

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

你没有问问题,也没有给出任何关于你正在使用的返回类型的细节,所以根据你的陈述,我将假装你正在尝试这样做:

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()};
       }
   }
}