重载基类方法时asp.net意外结果

时间:2011-11-16 17:17:54

标签: asp.net webforms

在asp.net webforms应用程序中,我为我的页面创建了一个基类。我已经在基类中声明了页面加载方法:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Response.Write("base")
End Sub

现在,在继承此类的类中,我再次使用了页面加载方法:

Protected Shadows Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Response.Write("descendant")
End Sub

由于我不理解的原因,我看到父母和孩子都被写入页面。两个Page_Load方法都在执行。为什么是这样?我的印象是,在后代类中隐藏或重载基类方法本质上会隐藏基类方法。我搜索了互联网,但我找不到具体的解释,为什么会发生这种情况。

谢谢, JS

1 个答案:

答案 0 :(得分:2)

Page_Load方法绑定到Page.Load事件。如果向子类添加Page_Load方法,除了基类之外,框架会自动将此方法添加为处理程序。预编译器产生的代码看起来有点像这样,因此一旦Load事件触发,两个方法都会被执行:

// VB.net (no idea if this really compiles, I'm more into C#)
AddHandler Load, AddressOf BaseClass.PageLoad
AddHandler Load, AddressOf SubClass.PageLoad