我刚刚在关于动态控制的两个问题上很活跃,答案几乎总是关于在回发时重新创建,问题是这个的正确位置在哪里
这是两个 SO 问题
我们总是通过重写CreateChildControls来创建动态控件
浏览了反射器中的很多控件,主要是 Telerik 控件,我一直认为这是正确的,但是很多人说它们应该在 Init 中创建。
我应该继续使用 CreateChildControls 还是 Init 是正确的方式......为什么这看起来如此混乱......
我刚刚在关于动态控制的两个问题上很活跃,答案几乎总是关于在回发时重新创建,问题是这个的正确位置在哪里
这是两个 SO 问题
我们总是通过重写CreateChildControls来创建动态控件
浏览了反射器中的很多控件,主要是 Telerik 控件,我一直认为这是正确的,但是很多人说它们应该在 Init 中创建。
我应该继续使用 CreateChildControls 还是 Init 是正确的方式......为什么这看起来如此混乱......
事实上,他们都完成了同样的事情。如果您正在为您的组织开发控件,那么将它放在 init 中就可以了(因为它会工作,即使它“在技术上它应该在的地方”,但是 MS 已经创建了一个他们期望它去的方法.
如果您像 Telerik 一样,正在创建其他人将使用的控件,那么我肯定会将它放在CreateChildControls
课堂上。为什么?因为,这是人们所期望的,这也是 MS 希望控制开发人员做的事情。在这种情况下(特别是如果您开发的控件不是密封的),您必须关心的是有人可以重写不同的方法,就像您已经看到很多人重写init
该类以使他们的代码工作一样他们想要的方式。您总是希望避免您的代码因忘记调用基本方法而神秘地无法工作的情况,并且没有记录在案。当你把它放在CreateChildControls
您告诉其他开发人员的方法是:“我可能正在做一些事情,在这里创建您想要注意的控件。” 如果我覆盖它,我总是会考虑对该方法的基础进行分类。
将它放入其中的另一个好处CreateChildControls
是很多人可能不知道它(而知道它的人知道它的用途)。因此,当他们从您的控件中继承Init
而忘记调用基本Init
方法时,您的代码仍然“神奇地”工作,他们不必大惊小怪地找出问题所在。
收藏此页!
ASP.NET 页面生命周期概述 http://msdn.microsoft.com/en-us/library/ms178472.aspx