我在ASP.NET中编写了以下代码
我有一个基页:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Base Page Called");
}
我有一个派生页面,其中包含以下代码:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Derived Page Called");
}
现在,当我调用Derived页面时,它不会调用Base Page的Page_Load。它显示
“派生的页面被调用”。
现在,如果我将Derived页面的Load事件处理程序名称更改为“Page1_Load”,并且实现如下,则调用Base页面。
protected void Page1_Load(object sender, EventArgs e)
{
Response.Write("Derived Page Called");
}
“调用基页”。
这种行为的原因是什么?
答案 0 :(得分:1)
如果存在具有Page_Load名称的方法,则会自动连接Page_Load,因此如果在派生类中定义一个方法,它将从基础中隐藏一个。但是,它必须按名称进行匹配,因此通过为派生类中的一个提供后缀,它不再隐藏基本实现,因此它将获取基本实现并使用它。
如果您也将Page1_Load放在基座中,您将无法获得输出
Base:
protected virtual void Page_Load(object sender, EventArgs e)
{
Response.Write("Base Page Called");
}
Derived:
protected override void Page_Load(object sender, EventArgs e)
{
base.Page_Load();
Response.Write("Derived Page Called");
}
如果您想要两者都被称为
,请尝试以上操作