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

C# 如何使用通用自定义集合实现多态接口,c#,collections,interface,generics,C#,Collections,Interface,Generics,好的-所以我想完成的是:使用接受三种自定义类型之一(通过接口约束)的泛型集合构建一个多边形接口 问题在于当我为写一个实现时 public virtual CustCollection<CustType1> GetEntities() { return new CustCollection<CustType1>(); } 公共虚拟客户集合GetEntities() { 返回新的CustCollection(); } 然后尝试在下一级撤销时覆盖它。我甚至不能选择覆

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

问题在于当我为写一个实现时

public virtual CustCollection<CustType1> GetEntities()
{
    return new CustCollection<CustType1>();
}
公共虚拟客户集合GetEntities() { 返回新的CustCollection(); } 然后尝试在下一级撤销时覆盖它。我甚至不能选择覆盖这个实现

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

i、 e.我需要的是:

interface IAccess<T>
{
    CustCollection<T> GetEntities();
}
接口IAccess
{
CustCollection GetEntities();
}
但这似乎不是一个选择

有什么建议吗?

我说得对吗?:)

公共接口IUnknown{}
公共类SoAndSo:IUnknown{}
公共类自定义集合
{
}
公共类祖先,其中T:IUnknown
{
公共虚拟CustomCollection GetEntities()
{
返回null;
}
}
公共类后代:祖先
{
公共覆盖CustomCollection GetEntities()
{
返回base.GetEntities();
}
}
我说对了吗?:)

公共接口IUnknown{}
公共类SoAndSo:IUnknown{}
公共类自定义集合
{
}
公共类祖先,其中T:IUnknown
{
公共虚拟CustomCollection GetEntities()
{
返回null;
}
}
公共类后代:祖先
{
公共覆盖CustomCollection GetEntities()
{
返回base.GetEntities();
}
}

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

所以(很抱歉,这是高级别的,我无法写出我的实际实现)

接口IAccess其中T:ITypeInterface
{
CustCollection GetEntities(过滤器);
}
我尝试了建议的方法,但我有一个由3个类组成的继承链,并且在使用建议的模型时与最顶层的父类有问题

我将约束保留在自定义集合上:

 public class CustCollection<T> : IEnumerable<T> where T : ITypeInterface
    {}
公共类CustCollection:IEnumerable其中T:ITypeInterface
{}
这对我来说真的很有效,因为我意识到我真的不需要与父类共享功能(因此基本上没有强制执行真正的多态性…只有在公共对象交互的意义上,核心功能是完全独立的)

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

  public new CustCollection<Type> GetEntities(Filter filter)
    {
        return new CustCollection<Type>();
    }
public新客户集合GetEntities(过滤器过滤器)
{
返回新的CustCollection();
}

我希望这对一些人有帮助……虽然我没有完全实现我一开始打算做的事情,但我发现这是一个适合我的情况的解决办法。

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

所以(很抱歉,这是高级别的,我无法写出我的实际实现)

接口IAccess其中T:ITypeInterface
{
CustCollection GetEntities(过滤器);
}
我尝试了建议的方法,但我有一个由3个类组成的继承链,并且在使用建议的模型时与最顶层的父类有问题

我将约束保留在自定义集合上:

 public class CustCollection<T> : IEnumerable<T> where T : ITypeInterface
    {}
公共类CustCollection:IEnumerable其中T:ITypeInterface
{}
这对我来说真的很有效,因为我意识到我真的不需要与父类共享功能(因此基本上没有强制执行真正的多态性…只有在公共对象交互的意义上,核心功能是完全独立的)

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

  public new CustCollection<Type> GetEntities(Filter filter)
    {
        return new CustCollection<Type>();
    }
public新客户集合GetEntities(过滤器过滤器)
{
返回新的CustCollection();
}

我希望这对一些人有帮助……虽然我没有完全实现我一开始打算做的事情,但我发现这是一个适合我的情况的解决办法。

我最终取消了对集合的约束,创建了一个新接口,并像我以前对集合所做的那样约束了该接口。然后,任何对象(我的集合接口对象)都实现了IAccess接口,并指定了对象类型。如果我明天还记得跳回到这里,我将用伪代码示例发布我的完整答案(目前仍然有太多的新手无法回答…必须等待8个小时)。我结束了对集合的约束,创建了一个新接口,并像我以前对集合所做的那样约束该接口。然后,任何对象(我的集合接口对象)都实现了IAccess接口,并指定了对象类型。如果我明天还记得跳回到这里,我将用伪代码示例发布我的完整答案(目前仍然有太多的新手无法回答…必须等待8小时)。