1

我正在使用 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 背景,如何使我的 SitePagePage_Load方法成为最终的、不可覆盖的?我知道我可以使用嵌套母版页来实现相同的目的,但我不想重新定义页面的内容。谢谢你

4

4 回答 4

0

使用-keyword,其作用与中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"); }
}
于 2013-04-22T10:03:10.203 回答
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);
}
于 2013-04-22T10:07:47.237 回答
0

只有当一个方法被标记为“virtual”或“abstract”时,它才是可覆盖的。

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

于 2013-04-22T10:13:34.407 回答
0

覆盖 SupportAutoEvents。

受保护的密封覆盖 bool SupportAutoEvents { get { return false; } }

于 2013-04-22T12:49:10.397 回答