如何在使用自定义基页类时阻止覆盖Page_Load方法

时间:2013-04-22 10:00:16

标签: c# inheritance webforms

我正在使用ASP.NET 4.5开发ASP.NET Webforms网站。 我有一个用于表单的母版页,但我希望页面类继承自另一个SitePage类,其代码如下:

public abstract class SitePage : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // common logic here
        Page_LoadImpl(sender, e);
    }

    protected abstract void Page_LoadImpl(object sender, EventArgs e);
}

页面的类看起来像是:

public partial class MyPage: SitePage
{
    protected override void Page_LoadImpl(object sender, EventArgs e)
    {
       //page specific logic here
    }
}

我来自Java背景,如何使我的SitePage Page_Load方法最终,不可覆盖?我知道我可以使用嵌套母版页来实现同样的目的,但我不想重新定义页面的内容。 谢谢

4 个答案:

答案 0 :(得分:0)

使用sealed - 关键字,其作用与finalJava的用途相同。

来自MSDN

的示例
class X
{
    protected virtual void F() { Console.WriteLine("X.F"); }
    protected virtual void F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
    sealed protected override void F() { Console.WriteLine("Y.F"); }
    protected override void F2() { Console.WriteLine("X.F3"); }
}
class Z : Y
{
    // Attempting to override F causes compiler error CS0239. 
    // protected override void F() { Console.WriteLine("C.F"); }

    // Overriding F2 is allowed. 
    protected override void F2() { Console.WriteLine("Z.F2"); }
}

答案 1 :(得分:0)

public abstract class SitePage : Page
{
    sealed protected void Page_Load(object sender, EventArgs e)
    {
        // common logic here
        Page_LoadImpl(sender, e);
    }

    protected abstract void Page_LoadImpl(object sender, EventArgs e);
}

答案 2 :(得分:0)

如果方法标有“虚拟”或“抽象”,则该方法只能覆盖。

您的方法“Page_Load”未标记这些关键字,因此它已经不可覆盖。

答案 3 :(得分:0)

覆盖SupportAutoEvents。

protected sealed override bool SupportAutoEvents {         得到         {             返回false;         } }