Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 好的,我应该在哪里创建动态控件_C#_Asp.net_Dynamic Controls - Fatal编程技术网

C# 好的,我应该在哪里创建动态控件

C# 好的,我应该在哪里创建动态控件,c#,asp.net,dynamic-controls,C#,Asp.net,Dynamic Controls,我刚刚积极地回答了两个关于动态控制的问题,答案几乎总是关于在回发时重新创建,问题是这个问题的正确位置在哪里 这里有两个问题 我们总是通过重写来创建动态控件 通过查看reflector中的许多控件,主要是telerik控件,我一直认为这是正确的,但很多人说它们应该在Init中创建 我应该继续使用CreateChildControls还是Init是正确的方法。。。 为什么这似乎是一个令人困惑的领域。将此页面添加为书签 ASP.NET页面生命周期概述 事实上,他们都完成了同样的任务。如果你正在为你

我刚刚积极地回答了两个关于动态控制的问题,答案几乎总是关于在回发时重新创建,问题是这个问题的正确位置在哪里

这里有两个问题

我们总是通过重写来创建动态控件

通过查看reflector中的许多控件,主要是telerik控件,我一直认为这是正确的,但很多人说它们应该在Init中创建

我应该继续使用CreateChildControls还是Init是正确的方法。。。 为什么这似乎是一个令人困惑的领域。

将此页面添加为书签

ASP.NET页面生命周期概述

事实上,他们都完成了同样的任务。如果你正在为你的组织开发控制,那么把它放在init中就可以了(就像在it中一样,尽管它“在技术上是应该在的地方”,但MS已经创建了一种方法,他们希望它能去哪里

如果你像一个Telerik,你正在创建其他人将要使用的控件,那么我肯定会把它放在
CreateChildControls
类中。为什么?因为,这是人们期望的,也是微软希望控件开发人员做的。在这种情况下,你必须关心什么(特别是如果您开发的控件未密封),就是有人可以重写不同的方法,就像你看到的很多人重写
init
类,使他们的代码按他们希望的方式工作。你总是希望避免出现这样的情况,即你的代码神秘地无法工作,因为他们忘了调用基方法,而且它没有文档记录。当你把它放入
CreateChildControls
method您告诉其他开发人员的是:“我可能正在做一些您希望注意的创建控件的事情。”如果我重写了该方法,我总是会考虑对该方法的基础进行分类


将它放入
CreateChildControls
的另一个好处是,很多人可能不知道它(知道的人知道它的用途)。因此,当他们使用
Init
从你的控件和monkey继承时,忘记调用base
Init
方法,你的代码仍然“神奇地”工作正常,他们不必为找出哪里出了问题而大惊小怪。

这也与值得注意的一点相矛盾,即如果您注册了一个控件适配器,则InsureChildControl将调用您的控件适配器,这可能是您想要的,也可能不是您想要的。。