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がControlから継承するWebControlから継承することがわかります。

CreateChildControl()は、Controlで次のように定義されています。

protected internal virtual void CreateChildControls()
{
}

つまり、オーバーライドする必要があるのはそこだけです。

これを、BaseDataListなど、Controlから継承する他のいくつかのコントロールと比較すると、そのメソッドには、出力をチェックおよびレンダリングするための多くの機能があることがわかります。

意味あり。ここでMSDNのドキュメントを読むと、子コントロールのレンダリングを実装する必要があることがわかります。継承元のクラスでこのメソッドを呼び出す必要がある場合にのみ、呼び出す必要があります。

于 2011-12-05T23:18:10.323 に答える