gpt4 book ai didi

c# - AutoEventWireup 和 base.OnLoad(e) 调用 Self 导致 Stack Overflow

转载 作者:太空狗 更新时间:2023-10-30 00:47:29 27 4
gpt4 key购买 nike

使用 VS2008,C#。当 AutoEventWireup 设置为 true 并且在网络表单中我调用 base.OnLoad(e) 时:

protected void Page_Load(object sender, EventArgs e)
{
base.OnLoad(e);
}

base.OnLoad(e) 最终调用 Page_Load(调用自身)。这最终导致堆栈溢出错误。我已经能够通过将 AutoEventWireup 设置为 false 并覆盖 OnLoad 来解决它:

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}

这如我所料(没有堆栈溢出)。但是谁能解释为什么在第一个示例中 base.OnLoad(e) 调用相同的加载事件(调用自身)而不是调用基类中的 OnLoad 事件(System.Web.UI.Page)?

最佳答案

Page.OnLoad 里面有如下伪代码

protected virtual void OnLoad() {
// some stuff

if (Load != null)
Load(this, new EventArgs());
}

如果您覆盖 OnLoad 函数,发生的情况是:您的 OnLoad 发生,然后它调用 base.OnLoad(),并且调用(空)Load 事件。

如果您实现 Load 事件并调用 base.OnLoad(),则会发生以下情况:base.OnLoad() 调用加载 事件。 Load 事件然后调用 base.OnLoad()。然后,base.OnLoad() 调用 Load 事件。正如他们所说,剩下的就是要了解递归,您必须先了解递归。

希望我说清楚了。

关于c# - AutoEventWireup 和 base.OnLoad(e) 调用 Self 导致 Stack Overflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/563594/

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