AutoEventWireup和base.OnLoad(e)调用Self导致栈溢出VS2008,C#的使用。当AutoEventWireup设置为true并且在webform中我调用base.OnLoad(e):protectedvoidPage_Load(objectsender,EventArgse){base.OnLoad(e);}base.OnLoad(e)最后调用Page_Load(调用自身)。这最终导致堆栈溢出错误。我已经能够通过将AutoEventWireup设置为false并覆盖OnLoad来解决它:protectedoverridevoidOnLoad(EventArgse){base.OnLoad(e);这按预期工作(没有堆栈溢出)。但是有人可以解释为什么在第一个示例base.OnLoad(e)中调用相同的加载事件(调用自身)而不是在基类(System.Web.UI.Page)中调用OnLoad事件吗?OnLoad不调用自身,它调用Load事件。Page.OnLoad方法仅包含对附加事件的调用。您不应从Load事件处理程序调用base.OnLoad,否则会导致无限循环。Page.OnLoad具有以下伪代码protectedvirtualvoidOnLoad(){//somestuffif(Load!=null)Load(this,newEventArgs());如果您覆盖OnLoad函数会发生什么:您的OnLoad发生,然后它调用base.OnLoad(),并调用(空)Load事件。如果您实现Load事件并调用base.OnLoad(),则会发生以下情况:base.OnLoad()调用Load事件。然后Load事件调用base.OnLoad()。然后,base.OnLoad()调用Load事件。正如他们所说,剩下的就是理解递归,你必须先理解递归。希望我清除自己。以上就是C#学习教程:AutoEventWireup和base.OnLoad(e)调用Self导致堆栈溢出分享全部内容。如果对大家有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
