что будет, если мы не вызовем base.createchildcontrols () - PullRequest
1 голос
/ 06 декабря 2011

Я просто хотел бы знать, что произойдет, если мы не добавим 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 Ответ

1 голос
/ 06 декабря 2011

Краткий ответ ... Ничего!Вам не нужно вызывать базовую реализацию (хотя вы всегда можете попробовать удалить ее, чтобы увидеть, что происходит; -)

Используя ILSpy , мы видим, что CompositeControl наследуется от WebControl, который наследуетиз элемента управления.

CreateChildControl () определяется в элементе управления как:

protected internal virtual void CreateChildControls()
{
}

т.е. он только для переопределения.

Сравните это с некоторыми другими элементами управления, которые наследуютиз Control, как BaseDataList, и вы можете видеть, что этот метод обладает множеством функциональных возможностей для проверки и визуализации вывода.

Это имеет смысл.Читая документацию MSDN, здесь , мы видим, что вам нужно реализовать рендеринг любых дочерних элементов управления.Только если класс, из которого вы наследуете, требует вызова этого метода, вам придется вызывать его.

...