2011-12-05 2 views
1

コードに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はControlから継承するWebControlを継承しています。即ち

protected internal virtual void CreateChildControls() 
{ 
} 

それが上書きされるだけある:

CreateChildControlは()のような制御上で定義されています。

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

これは意味があります。 MSDNのドキュメントhereを読むと、子コントロールのレンダリングを実装することがわかります。あなたが居住しているクラスがこのメソッドを呼び出す必要がある場合にのみ、それを呼び出さなければなりません。

+0

こんにちは、私はあなたの意見を持っています。 base.createchildcontrols()を呼び出さないと、複合コントロールに提供されている機能が失われます...そうですか? – dotnetrocks

+0

この例では@dotnetrocks、いいえ、CompositeControlについては何もしません。しかし、これは他のコントロールでは当てはまらないかもしれません。 – dash

関連する問題