2010-03-28 84 views
3

我想定義一組收集和保存數據的類。我想打電話給他們要麼按需提供,要麼按照責任鏈的方式打電話,因爲來電者喜歡。我可以傳遞一個非泛型類型,其中泛型類型是預期的嗎?

爲了支持鏈接,我宣佈我的接口,像這樣:

interface IDataManager<T, K> 
{ 
    T GetData(K args); 
    void WriteData(Stream stream); 
    void WriteData(T data, Stream stream); 

    IDataCollectionPolicy Policy; 

    IDataManager<T, K> NextDataManager; 
} 

但T公司和K的每一個具體的類型會有所不同。如果我這樣給它:

IDataManager<T, K> NextDataManager; 

我假設調用代碼將只能鏈接具有相同T和K的類型。有沒有辦法讓它鏈接任何類型的IDataManager?這發生在我

一兩件事是有IDataManager從非通用IDataManager繼承像這樣:

interface IDataManager { } 

interface IDataManager<T, K>: IDataManager 
{ 
    T GetData(K args); 
    void WriteData(Stream stream); 
    void WriteData(T data, Stream stream); 

    IDataCollectionPolicy Policy; 

    IDataManager NextDataManager; 
} 

難道這是否可行呢?

回答

2

是的,您提出的解決方案是正確的。一般的做法是(如你所描述的)創建一個非泛型的基類/接口,然後是實現/繼承它的泛型類/接口。

+0

謝謝,亞當。 – 2010-03-28 19:55:12

4

拆分的接口爲通用和非通用部分是一個共同的模式,特別是如果你移動非通用的方法來對非通用接口:

interface IDataManager 
{ 
    void WriteData(Stream stream); 
    IDataCollectionPolicy Policy { get; set; } 
    IDataManager NextDataManager { get; set; } 
} 

interface IDataManager<T, K> : IDataManager 
{ 
    T GetData(K args); 
    void WriteData(T data, Stream stream); 
} 
+0

這就是我想知道的。謝謝。 有了這一點,那麼,我該怎麼能夠說: SomeClassThatImplementsIDataManager 的obj =新... AnotherSuchClass <字符串的ArrayList> nextOne =新... obj.Next = nextOne; – 2010-03-28 19:45:37