我只想知道如果我们不在代码中放入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();
}
}发布于 2011-12-06 07:18:10
简短的回答是...没什么!您不需要调用基本实现(尽管您可以始终尝试删除它以查看发生了什么;-)
使用ILSpy,我们可以看到CompositeControl继承了WebControl,后者继承了Control。
CreateChildControl()在控件上定义为:
protected internal virtual void CreateChildControls()
{
}也就是说,它只在那里被重写。
将它与其他一些继承自控件的控件进行比较,如BaseDataList,您可以看到该方法具有许多用于检查和呈现输出的功能。
这是有道理的。阅读MSDN文档here,我们可以看到它是由您实现任何子控件的呈现。只有当你继承的类需要调用这个方法时,你才需要调用它。
https://stackoverflow.com/questions/8393118
复制相似问题