如何使用通用自定义集合实现多态接口

时间:2011-05-23 15:13:14

标签: c# collections interface generics

好 - 所以我想要完成的是:使用一个通用集合构建一个poly接口,该集合接受三种自定义类型之一(通过接口约束)。

当我为

编写实现时,问题就在于此
public virtual CustCollection<CustType1> GetEntities()
{
    return new CustCollection<CustType1>();
}

然后尝试在下一级别的撤销中覆盖它。我甚至都不能覆盖这种实现。

另一种可能性是使用接口,但是我需要接口接受泛型,而不是指定类型......我似乎无法工作

即。我需要的是:

interface IAccess<T>
{
    CustCollection<T> GetEntities();
}

但这似乎不是一个选择......

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我找到你了吗? :)

public interface IUnknown { }

public class SoAndSo : IUnknown { }

public class CustomCollection<IUnknown>
{
}

public class Ancestor<T> where T : IUnknown
{
    public virtual CustomCollection<T> GetEntities()
    {
        return null;
    }
}

public class Descender : Ancestor<SoAndSo>
{
    public override CustomCollection<SoAndSo> GetEntities()
    {
        return base.GetEntities();
    }
}

答案 1 :(得分:0)

我最终创建了一个接口(如上所示的IAccess)并在该接口上放置了类型约束...然后在与所讨论的类型交互的所有类上使用该接口。

所以(对不起,这是高级别的,我无法写出我的实际实现)

interface IAccess<T> where T : ITypeInterface
{
    CustCollection<T> GetEntities(Filter filter);
}

我尝试了所建议的内容,但我有一个由3个类继承的链,并且使用建议的模型与最顶层的父级有问题。

我在自定义集合上留下了约束:

 public class CustCollection<T> : IEnumerable<T> where T : ITypeInterface
    {}

这只对我有用,因为我意识到我真的不需要与父类共享功能(所以基本上没有最终强制执行真正的多态...只是在共同对象交互的意义上,核心功能完全是单独的)。

为了避免阴影,我宣布新的

  public new CustCollection<Type> GetEntities(Filter filter)
    {
        return new CustCollection<Type>();
    }

我希望这对一些人有所帮助......虽然我没有完全按照我在开始时要做的那样做,但我发现这对我的情况来说是一个合适的解决方法。