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小时)。