2011-05-23 76 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