2011-12-05 15 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。

CreateChildControl()是在控制定義爲:

protected internal virtual void CreateChildControls() 
{ 
} 

即只有在那裏被重寫。

將此與其他一些繼承自Control的控件(如BaseDataList)進行比較,您可以看到該方法具有許多用於檢查和呈現輸出的功能。

這是有道理的。閱讀MSDN文檔here,我們可以看到它是爲了實現任何子控件的呈現。只有當你插入的課程需要調用這個方法時,你才需要調用它。

+0

嗨,我明白了你的觀點。如果不調用base.createchildcontrols(),我們將失去它提供給我們的複合控件的功能......對吧? – dotnetrocks

+0

@dotnetrocks在這個實例中,不,對於CompositeControl它沒有做任何事情。但是其他控件可能不適用。 – dash