如果我们不调用base.createchildcontrols()会发生什么

时间:2011-12-05 22:59:05

标签: asp.net createchildcontrols

我想知道如果我们不在代码中放置base.createchildcontrols()会发生什么。是否可以在不调用base.createchildcontrols()的情况下创建复合控件?

 [ToolboxData("<{0}:Login runat=server></{0}:Login>")]
public class Login : CompositeControl
{
 private TextBox txtUsername = new TextBox();
private TextBox txtPassword = new TextBox();
private Button btnLogin = new Button();

protected override void CreateChildControls()
{
txtUsername.ID = "txtUsername";
txtPassword.ID = "txtPassword";
txtPassword.TextMode = TextBoxMode.Password;
btnLogin.ID = "btnLogin";
btnLogin.Text = "Login";

Controls.Add(txtUsername);
Controls.Add(txtPassword);
Controls.Add(btnLogin);

base.CreateChildControls();
 }
  }

1 个答案:

答案 0 :(得分:1)

简短的回答是......没什么!您不需要调用基本实现(尽管您可以尝试删除它以查看会发生什么; - )

使用ILSpy,我们可以看到CompositeControl继承自继承自Control的WebControl。

CreateChildControl()在Control上定义为:

protected internal virtual void CreateChildControls()
{
}

即。它只是被覆盖。

将此与从Control继承的其他控件(如BaseDataList)进行比较,您可以看到该方法具有许多用于检查和呈现输出的功能。

这是有道理的。阅读MSDN文档here,我们可以看到,您可以实现任何子控件的呈现。只有当你所在的类需要调用这个方法时,你才需要调用它。