2009-10-27 70 views
2

我有一種感覺,我已經知道答案的人將會給,但在這裏不用反正:我可以使現有(固定)類實現新的界面嗎?

說我正在寫一個新的類,我們稱之爲PooledQueue<T>,在其中我要接受一個構造函數實現接口IResourcePool<T>的參數。這裏的想法是,我可以使用任何底層的池對象,只要它給我的屬性/方法IResourcePool<T>(你知道,接口背後的整個想法,對嗎?)。

但是,如果有已經可用的一類,它提供的IResourcePool<T>所有功能,但它並不實現IResourcePool<T>(我不能修改源代碼),有沒有辦法對我來說,強制執行?

我期望人們回答的是我應該爲現有的類實現必要的接口的包裝。但我只是喜歡能夠做到這一點:

// GetDataPool returns an object of type Pool<Data> that I can't modify 
var q = new PooledQueue<Data>(GetDataPool()); 

,而不是這樣的:

var q = new PooledQueue<Data>(new PoolWrapper<Data>(GetDataPool())); 

我想什麼,我覺得還是很有用的是,如果一個類的實現接口的可與類定義分開定義。一種精心設計的數據庫結構的排序方式 - 使用關聯錶鏈接實體與其他表的ID。那有意義嗎?

回答

2

開箱即用,不能強制類中的接口不繼承它。

有許多方法,例如使用透明RealProxy或第三方庫(如LinFU),它們允許您模擬這樣的東西,但成本高於製作包裝類。

事實上,你可以讓這會創建包裝,使代碼保持清潔過載構造...

+0

+1 - 特別喜歡用重載的構造函數的一部分。 – 2009-10-27 19:19:07

相關問題