0

我在 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");

    }

现在,当我调用派生页面时,它不会调用基本页面的 Page_Load。它显示

“调用派生页面”。

现在,如果我将派生页面加载事件处理程序名称更改为“Page1_Load”并且实现如下,则会调用基本页面。

  protected void Page1_Load(object sender, EventArgs e)
    {
        Response.Write("Derived Page Called");


    }

“调用的基本页面”。

这种行为的原因是什么?

4

1 回答 1

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");
}

如果您希望两者都被调用,请尝试上述方法

于 2013-07-21T06:36:59.927 回答