在派生类中重写MyBase.OnInit(e)有什么影响?

use*_*679 5 c# vb.net asp.net

我继承自TextBox并重写OnInit。

Protected Overrides Sub OnInit(e As EventArgs)

MyBase.OnInit(e) 

' I'm adding a dynamic control to go along with my textbox here...
Controls.Add(Something)

End Sub
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我有MyBase.OnInit(e),但是我在没有控件的情况下使用了一段时间,因为我忘了把它放在那里。这是我通常出于习惯而做的事情,因此我从未考虑过它的目的:

在派生类中重写OnInit时,请确保调用基类的OnInit方法,以便已注册的委托接收事件。

有点尴尬的是,这对我来说尚不明确,但我的控制效果很好,所以我只是希望有人能举例说明可能造成问题的原因。

Dav*_*idG 4

查看 的参考源代码TextBox如果您遵循继承Control,您会看到这是 的基本代码OnInit

protected internal virtual void OnInit(EventArgs e) {
    if(HasEvents()) {
        EventHandler handler = _events[EventInit] as EventHandler;
        if(handler != null) {
            handler(this, e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以如果你不打电话base.OnInit,这就是你会错过的。