2016-08-06 29 views
-1

我有一個WrapperBase<PocoBase>類,它包裝POCO對象並提供額外的功能:如何指定BaseType <any>?

public class WrapperBase<T> 
where T : PocoBase 

和幾個實現在該基類的頂部。

public class ButtonWrapper : WrapperBase<Button> 
public class ZipperWrapper : WrapperBase<Zipper> 

我試圖寫一個類,需要一個WrapperBase<T>作爲構造函數的參數。

public class ThingDoer 
    where T : PocoBase 
{ 
    public ThingDoer(WrapperBase<T> wrapper) 
    { 
    } 
} 

但無論我怎麼努力,該ThingDoer希望爲T一個定義:

new ThingDoer<Zipper>(zipperWrapper); 
// I don't care what T is... get rid of <Zipper> 

我怎麼能說「我不在乎什麼T是,因爲所有我想要的功能在WrapperBase「?

+1

在使用泛型時,你必須想象'<' and '>'只是名稱的一部分。想象一下,你有兩個類定義爲「公共類ButtonWrapper:WrapperBase_Button」和「公共類ZipperWrapper:WrapperBase_Zipper」,再次考慮你的問題,你不能只做'WrapperBase',因爲你沒有類名爲'WrapperBase',您有兩個名爲'WrapperBase_Button'和'WrapperBase_Zipper'的類,除了共享名稱中相同的前12個字母外,它們完全沒有任何關係。 –

回答

2

我該怎麼說「我不在乎T是什麼,因爲我想要的所有功能都在WrapperBase中」?

您可以定義一個接口IWrapperFunctionality,該接口指定提供該功能的方法。讓WrapperBase<T>實現該接口,並將其用作構造函數參數。

public ThingDoer(IWrapperFunctionality wrapper) 
{ 
} 
相關問題