Что произойдет, если мы не вызовем base.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 ответ
Краткий ответ... Ничего! Вам не нужно вызывать базовую реализацию (хотя вы всегда можете попробовать удалить ее, чтобы увидеть, что происходит;-)
Используя ILSpy, мы видим, что CompositeControl наследуется от WebControl, который наследуется от Control.
CreateChildControl () определяется в Control как:
protected internal virtual void CreateChildControls()
{
}
то есть это только там, чтобы быть переопределенным.
Сравните это с некоторыми другими элементами управления, которые наследуются от Control, такими как BaseDataList, и вы увидите, что этот метод обладает множеством функций для проверки и рендеринга вывода.
Это имеет смысл. Читая документацию MSDN, мы увидим, что именно вам нужно реализовать рендеринг любых дочерних элементов управления. Только если класс, из которого вы наследуете, требует вызова этого метода, вам придется вызывать его.