2010-12-21 49 views
3

我剛纔一直活躍在關於動態控制兩個問題,答案几乎總是有關重新創建回發,問題是哪裏是這個好吧,到底我應該在哪裏創建動態控件

正確的位置

這裏有兩個SO問題

question one

question 2

我們始終以O做到動態控制創建verriding CreateChildControls

通過反射器中的很多控件,主要是telerik控件,我總是認爲這是正確的,但很多人說他們應該在Init中創建。

我應該繼續使用的CreateChildControls或INIT正確的方式... 爲什麼這個問題似乎混亂的這樣一個區域..

回答

3

事實上,他們都完成同樣的事情。如果你正在爲你的組織開發控制,那麼把它放在init中將會很好(因爲即使它在「技術上應該是它的地方」也是可行的,但是MS已經創建了一種方法,他們期望它去。

如果你像一個Telerik的,你在哪裏創建控件別人會用的話,我一定會把它的CreateChildControls類。爲什麼呢?因爲,這正是人們所期待,而這正是MS想要控制在這種情況下你必須關心什麼(尤其是如果你開發的控件沒有密封的話),就是有人可以重寫不同的方法,就像你看到很多人重寫了這個類,讓他們的代碼按照他們想要的方式工作。你總是希望避免你的代碼因爲它們而神祕地無法工作的情況忘記調用基本方法,並且沒有記錄。當你把它放在CreateChildControls的方法中時,你告訴其他開發者的是:「我可能正在做一些事情來創建你想要注意的控件。」如果我重寫它,我總是會考慮對該方法的基礎進行分類。

把它放在CreateChildControls的另一個好處是,很多人可能不知道它(以及那些做的人,知道它的用途)。所以當他們繼承了你的控制和猴子與Init,並忘記調用基地方法Init,你的代碼仍然「神奇」的作品,他們不必大驚小怪,搞錯了什麼。

+1

另外值得注意的是,EnsureChildControls將調用您的控制適配器,如果你有一個註冊,這可能會或可能不需要。 – 2010-12-21 15:02:28

相關問題