2011-05-23 65 views
1

好 - 所以我想要完成的是:构建一个多接口,使用接受三种自定义类型之一(通过接口约束)的泛型集合。当我写如何使用通用定制集合实现多态接口

public virtual CustCollection<CustType1> GetEntities() 
{ 
    return new CustCollection<CustType1>(); 
} 

的实现,然后尝试在derevation的一个新的水平来覆盖它

问题在于各地。这甚至不是我的选择来覆盖这个实现。

另一种可能性是利用一个接口,但后来我需要的接口来接受通用的,这是我似乎无法得到工作

未指定类型...即我需要的是:

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

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

有什么建议吗?

回答

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>(); 
    } 

我希望这是有帮助的一些...虽然我没有取得什么我阐述了在开始做的,我发现这是一个适合我的情况的解决方法。

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(); 
    } 
} 
+0

这有助于让我走上正轨...... – dbobrowski 2011-05-23 17:51:47

+0

我最终取消了对集合的约束,创建了一个新界面,并且像之前在集合上完成的那样约束了这个界面。 然后,任何对象(我的集合接口对象)都实现了IAccess接口和指定的对象类型。 – dbobrowski 2011-05-23 17:53:42

+0

如果我记得明天在这里跳回来,我会用伪代码示例发布我的完整答案(目前仍然太多的newb现在回答...需要等待8小时)。 – dbobrowski 2011-05-23 17:55:05