1

我只是想知道如果我们不将 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();
 }
  }
4

1 回答 1

1

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

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

CreateChildControl() 在 Control 上定义为:

protected internal virtual void CreateChildControls()
{
}

即它只能被覆盖。

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

这是有道理的。阅读 MSDN 文档,在这里,我们可以看到它是为您实现任何子控件的呈现。只有当您继承的类需要调用此方法时,您才必须调用它。

于 2011-12-05T23:18:10.323 回答