gpt4 book ai didi

c# - 在派生类中覆盖它时不使用 MyBase.OnInit(e) 有什么影响?

转载 作者:太空狗 更新时间:2023-10-30 01:16:05 29 4
gpt4 key购买 nike

我继承自 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

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

When overriding OnInit in a derived class, be sure to call the base class’s OnInit method so that registered delegates receive the event.

有点尴尬,我不清楚这一点,但我的控制工作正常,所以我只是希望有人能举例说明什么会导致问题。

最佳答案

查看 reference source code对于 TextBox,如果您继续继承到 Control,您会看到这是 OnInit 的基本代码:

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

因此,如果您不调用 base.OnInit,就会遗漏此内容。

关于c# - 在派生类中覆盖它时不使用 MyBase.OnInit(e) 有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36683600/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com