好 - 所以我想要完成的是:使用一个通用集合构建一个poly接口,该集合接受三种自定义类型之一(通过接口约束)。
当我为
编写实现时,问题就在于此public virtual CustCollection<CustType1> GetEntities()
{
return new CustCollection<CustType1>();
}
然后尝试在下一级别的撤销中覆盖它。我甚至都不能覆盖这种实现。
另一种可能性是使用接口,但是我需要接口接受泛型,而不是指定类型......我似乎无法工作
即。我需要的是:
interface IAccess<T>
{
CustCollection<T> GetEntities();
}
但这似乎不是一个选择......
有什么建议吗?
答案 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>();
}
我希望这对一些人有所帮助......虽然我没有完全按照我在开始时要做的那样做,但我发现这对我的情况来说是一个合适的解决方法。