问题描述
|
好的-所以我要完成的工作是:利用一个接受三个自定义类型之一(通过接口约束)的通用集合构建一个poly接口。
问题出在我为...编写实现时
public virtual CustCollection<CustType1> GetEntities()
{
return new CustCollection<CustType1>();
}
然后尝试在下一个衍生层次上覆盖它。我什至无法选择重写此实现。
另一种可能性是利用接口,但是然后我需要接口接受通用类型,而不是指定类型...我似乎无法正常工作
即我需要的是:
interface IAccess<T>
{
CustCollection<T> GetEntities();
}
但这似乎不是一个选择...
有什么建议么?
解决方法
我说对了吗? :)
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();
}
}
,我最终创建了一个接口(如上所示的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>();
}
我希望这对某些人有帮助...尽管我并没有完全实现我最初打算做的事情,但我发现这是适合我的情况的解决方法。