子类继承父类Mainpage
public partial class loginpage : MainPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
    }
}
父类重写OnInit方法
 public class MainPage:System.Web.UI.Page
    {
        protected int a = 111;
        protected override void OnInit(EventArgs e)
        {
           if (Session["userName"] == null)  
            {  
               Response.Redirect("RegisterUI.aspx");  
                  
           }  
          base.OnInit(e);
   
        }    }我的疑问来了,执行loginpage页面,会跳转到RegisterUI.aspx页面,也就是说执行了父类的OnInit方法。这是为什么啊,明明我的子类page_load什么代码都没有,我没有执行父类的方法啊?为什么这样呢?

解决方案 »

  1.   

    1.子类没有重写父类的方法OnInit,所以就会执行父类的方法的。
    2、方法的调用不是在page_load里面控制的。
    3、page_load是自动邦定的事件,不是继承方法。
      

  2.   

    OnInit是个override函数,如果子类没有覆盖父类的同名方法,就会一层层向上调用
      

  3.   

    调用page_load的时候会调用OnInit方法,而OnInit被父类重写同时子类没有继续重写,所以会被调用。这使问题的本质。“一层层向上调用”这个说法不准确,要想做到这一点,每一层必须加上base.OnInit(e);否则override的方法就会彻底取代了父类的方法,而不会往上调用了。
      

  4.   

    OnInit这个会比Page_Load先执行,子类没有覆盖父类的OnInit方法便会自动先执行父类的方法自动跳转了
      

  5.   

    为什么paegload的时候会调用oninit方法呢?子类没有重写就一定会被调用么?
      

  6.   

    子类没有覆盖父类oninit的方法,然后父类里面又重写了父类的父类(父父类)的oninit,并且没有加base.oninit,这样的话,还会向上调用么?
      

  7.   


    这是在Page类中定义的逻辑