日期:2014-05-17  浏览次数:20401 次

子类继承父类,实例化子类的时候自动执行父类方法吗?
C# code

子类继承父类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.子类没有重写父类的方法OnInit,所以就会执行父类的方法的。
2、方法的调用不是在page_load里面控制的。
3、page_load是自动邦定的事件,不是继承方法。
------解决方案--------------------
OnInit是个override函数,如果子类没有覆盖父类的同名方法,就会一层层向上调用
------解决方案--------------------
调用page_load的时候会调用OnInit方法,而OnInit被父类重写同时子类没有继续重写,所以会被调用。这使问题的本质。

“一层层向上调用”这个说法不准确,要想做到这一点,每一层必须加上base.OnInit(e);否则override的方法就会彻底取代了父类的方法,而不会往上调用了。
------解决方案--------------------
OnInit这个会比Page_Load先执行,子类没有覆盖父类的OnInit方法便会自动先执行父类的方法自动跳转了