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