2010-10-11 50 views
1

我想我知道這個問題的答案,但我希望有人有着簡潔的解決方案。我們目前使用兩種下拉控件(Telerik和.Net)。我希望將這些結合到一個控制中,但是卻需要用戶友好的設計。動態繼承使用工廠

理想的情況下,控制將與的,也就是說,一個布爾屬性設計文件創建「SimpleBox,」確定繼承哪種控制。實例化將在代碼隱藏設計文件中生成,然後構造函數將動態加載基礎(這是不可能的)。簡單的解決方案是創建一個IDropDown接口,然後讓工廠創建正確的接口。唯一真正的問題是每次都必須手動編寫實例,這很麻煩,並且不會加速我們的進程。

雖然不能直接,我在尋找沿其對象構造內運行,用於設置底數的基礎上的布爾屬性工廠的線的解決方案。

乾杯

+0

你爲什麼這樣做?爲什麼有一個「SimpleBox」屬性比簡單地爲給定的情況選擇正確的控件並使用它更好? – 2010-10-11 21:53:56

+0

我們一直在使用telerik控件,但是由於我們在一些頁面上使用了很多telerik控件,每個頁面上都會產生很多MB的代碼。使用標準的.net DropDownBox大大降低了大小/速度。我打算爲DropDownBox製作一個適配器,以便它可以代替telerik組合。當然,我正在做所有這些來限制重構(因爲已經編碼了數千個telerik組合),並且對於我們所有的下拉菜單都有通用的方法。 – 2010-10-11 22:01:56

回答

4

你可能要考慮組成/代表團,而不是繼承在這裏。從本質上講,不是直接擴展任何一個類,而是創建一個包裝類,它擴展了Control(或類似的低級別)並實現了IDropDown,爲要使用的底層控件實現添加了IDropDown字段,方法調用感興趣的選定實現。但是,如果有很多方法,這很快就會變得乏味。

+0

我想到了這一點,但進一步複雜化,我們目前從我們當前的基本DropDownBox繼承控制問題(這將與混合替代)。繼承控件使用受保護的事件處理程序,但由於您無法在界面中擁有受保護的成員,因此我遇到了各種訪問問題,或許我做錯了。 – 2010-10-11 22:47:11

+1

@'g.foley' - 正如你所說,接口不能有保護方法,但你必須有一個實現該接口的基類,基類可以有保護的方法。 IDropDown接口可以有事件,允許你的混合類根據需要公開事件。 – Enigmativity 2010-10-11 23:47:35