我可能误解了base.OnLoad(e);
的含义我的理解是这个语句将调用它所调用的类的基类的OnLoad方法。但是,当我使用调试器逐步执行代码时,我看到不同的结果。
public abstract class BaseUC : System.Web.UI.UserControl
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
SomeAbstractMethod();
}
}
在ascx.cs具体类
中public partial class MyUserControl : BaseUC
{
protected void Page_Load(object sender, EventArgs e)
{
//On Load logic
}
}
我在base.OnLoad(e)
上有一个断点。当我按F11(步入)时,调试器将我带到MyUserControl的Page_Load
,因此控制流程为:
BaseUC.OnLoad()
MyUserControl.Page_Load()
BaseUC.SomeAbstractMethod()
有人可以解释这里发生了什么吗?
答案 0 :(得分:12)
答案 1 :(得分:5)
Page_Load和OnLoad是不同的东西=)
Page_Load是一个存在于ASP.net运行时调用的页面上的方法(感谢AutoEventWireUp的神奇之处)OnLoad是一种引发Load事件的方法,所以通过在 > base.OnLoad(e)调用你可以导致代码在引发事件之前执行,之后代码在引发事件之后运行。
请参阅weblogs.asp.net上Infinities Loop条目中的this blog entry,了解更多更广泛的解释。
答案 2 :(得分:2)
奇怪的是,你期待看到什么?我不认为你会看到它进入 base.OnLoad(e),因为那时你的基类是 System.Web.UI.UserControl ,那是一个系统类,...所以你很可能没有源代码可以进入它。
答案 3 :(得分:0)
您是否为System.Web加载了调试符号? F11不会进入你没有加载的代码。