我正在使用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
方法最终,不可覆盖?我知道我可以使用嵌套母版页来实现同样的目的,但我不想重新定义页面的内容。
谢谢
答案 0 :(得分:0)
使用sealed
- 关键字,其作用与final
中Java
的用途相同。
来自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; } }