2013-04-22 54 views
1

我正在使用ASP.NET 4.5开发ASP.NET Webforms网站。 我有,我用我的方式母版页,但我想要的页面类从另一个SitePage类继承,为此,代码如下:如何防止在使用自定义基页面类时覆盖Page_Load方法

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

的方法,如果它被标记为 “虚拟” 或 “抽象” 是只重写。

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

+0

好吧,我明白了,但是我可以在MyPage类中放入一个 'protected void Page_Load(object sender,EventArgs e)' 。我想这被视为默认的新方法,从BasePage中隐藏一个,正确的?在那种情况下,我没有办法阻止这种情况发生,对吧? – kfc 2013-04-22 10:23:39

+0

这是100%正确!编译器会发出警告。此警告可以通过在第二个Page_Load上使用关键字“new”来抑制。 – 2013-04-22 11:21:31

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

我会,但Page_Load不是一个覆盖。从我知道密封只能用于重写的方法,我是对吗? – kfc 2013-04-22 10:14:47

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

覆盖SupportAutoEvents。

保护密封覆盖BOOL SupportAutoEvents { 得到 { 返回FALSE; } }