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