AutoEventWireup 和 base.OnLoad(e) 调用 Self 导致堆栈溢出

2024-01-11

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

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

The base.OnLoad(e)最终打电话Page_Load(调用自身)。这最终会导致堆栈溢出错误。我已经能够通过设置来解决它AutoEventWireup虚假和压倒性的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 event.

如果您实施Load事件和呼叫base.OnLoad(),这就是发生的情况:base.OnLoad()称为Load事件。这Load事件然后调用base.OnLoad(). Then, base.OnLoad()称为Load事件。剩下的就是,正如他们所说,要理解递归,你必须首先理解递归。

希望我说清楚了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AutoEventWireup 和 base.OnLoad(e) 调用 Self 导致堆栈溢出 的相关文章

随机推荐