2010-12-21 48 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

相关问题