我认为:会实例化子控件并且把他们加入控件树
上面代码的注释说,控件会在加入控件树之前被初始化,因此我们要保证Page不为Null。
我认为:在根据声明语法生成控件树的过程中,执行到此步骤时,控件树已经生成了一部分,即Page在此时不可能为Null,因此不用判断Null。可是跟踪发现Page确实是Null,原因可能是,控件树已经部分生成,Page已经生成。但在此时子控件是不能访问Page的,所以才会是Null。
下面是编译源:

 private System.Web.UI.Control __BuildControlForm1() {
               System.Web.UI.HtmlControls.HtmlForm __ctrl;         
               __ctrl = new System.Web.UI.HtmlControls.HtmlForm();              
               this.Form1 = __ctrl;             
               __ctrl.ID = "Form1";           
               __ctrl.Method = "post";              
               System.Web.UI.IParserAccessor __parser = ((System.Web.UI.IParserAccessor)(__ctrl));              
               __parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n\t\t\t"));              
               this.__BuildControlPageTracker3();              
               __parser.AddParsedSubObject(this.PageTracker3);                             
               __parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n\t\t\t\t"));            
               this.__BuildControlButton1();             
               __parser.AddParsedSubObject(this.Button1);             
               __parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t"));              
               return __ctrl;
           }
           
           private void __BuildControlTree(System.Web.UI.Control __ctrl) {
               System.Web.UI.IParserAccessor __parser = ((System.Web.UI.IParserAccessor)(__ctrl));            
               __parser.AddParsedSubObject(this.CreateResourceBasedLiteralControl(0, 377, true));            
               __parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n\t</HEAD>\r\n\t<body>\r\n\t\t"));           
               this.__BuildControlForm1();             
               __parser.AddParsedSubObject(this.Form1);              
               __parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n\t</body>\r\n</HTML>\r\n"));              
           }
           
           protected override void FrameworkInitialize() {
               SetStringResourcePointer(ASP.WebForm1_aspx.__stringResource, 377);
               this.__BuildControlTree(this);
               this.FileDependencies = ASP.WebForm1_aspx.__fileDependencies;
               this.EnableViewStateMac = true;
               this.Request.ValidateInput();
           }
protected virtual void AddParsedSubObject(object obj)
{
      Control control1 = obj as Control;
      if (control1 != null)
      {
            this.Controls.Add(control1);
      }
}

 

可以看到在执行Init前,会编译运行上面自动生成的编译源,这样以来第一个问题就彻底清楚了,也证明我上面的判断是正确的。

在Init之前究竟执行了什么?相关推荐

  1. IHttpModule.Init方法被执行多次的原因

    (http://www.csharpwin.com/dotnetspace/446.shtml) 发现不少朋友跟我一样,错把IHttpModule.Init拿来当做Application_Start的 ...

  2. 页面事件(Init,Load,PreRender)执行顺序

    Init,Load,PreRender事件执行顺序:1)控件的Init事件 2)控件所在页面的Init事件 3)控件所在页面的Load事件 4)控件的Load事件 5)控件所在页面的PreRender ...

  3. Go: init()执行顺序问题

    init()函数会在包被初始化后自动执行,并且在main()函数之前执行,但是需要注意的是init()以及main()函数都是无法被显式调用的. 那么init()是不是最先执行的呢? 答案是否定的,首 ...

  4. shell公共函数:/etc/init.d/functions

    /etc/init.d/functions这个脚本是给/etc/init.d里边的文件使用的,提供了一些基础的功能,看看里边究竟有些什么.首先会设置umask,path,还有语言环境,然后会设置suc ...

  5. 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...

    原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...

  6. iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、v...

    2019独角兽企业重金招聘Python工程师标准>>> iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.vie ...

  7. Android 8.1 源码_启动篇(一) -- 深入研究 init(转 Android 9.0 分析)

    前言 init进程,它是一个由内核启动的用户级进程,当Linux内核启动之后,运行的第一个进程是init,这个进程是一个守护进程,确切的说,它是Linux系统中用户控件的第一个进程,所以它的进程号是1 ...

  8. go/golang init()方法的调用

    go/golang main() init()方法的调用 u011156212 · 2015-10-20 13:00:05 · 9965 次点击 · 预计阅读时间 1 分钟 · 27分钟之前 开始浏览 ...

  9. iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、view...

    iOS视图控制对象生命周期: init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用 ...

最新文章

  1. CodeIgniter开发实际案例-新闻网站【转】
  2. 比较常规治疗登记中阿巴西谱、阿达木单抗、依那西普和英夫利昔单抗治疗类风湿关节炎的疗效和起效时间...
  3. adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...
  4. apache spark_Apache Spark Job的剖析
  5. 2017将转行进行到底
  6. T-SQL删除存储过程
  7. chrome浏览器启用本地exe程序
  8. 我的私房IT学习网站
  9. 浅谈切比雪夫多项式推导及其实现模版归类
  10. LayUI使用distpicker.js插件实现三级联动
  11. 每日一面 - 从 innodb 的索引结构分析,为什么索引的 key 长度不能太长?
  12. matlab 求矩阵的逆
  13. UTC和东八区时间转换(python)
  14. Python中集合的常用操作
  15. 欧拉函数φ(x)相关性质及计算
  16. 通过docker部署一个简单的web服务
  17. 认真学习MySQL中的角色权限控制
  18. 深入浅出,一篇超棒的机器学习入门文章
  19. linux下磁盘sda,Linux下磁盘设备文件(sda,sdb,sdc….)变化问题
  20. 王者服务器维护什么时间结束8月25,8月25日体验服停机更新公告

热门文章

  1. python 中的queue, deque
  2. Meterpreter Guide
  3. BIM机器人来袭、你害怕了吗
  4. SecureCRT的快捷键
  5. 修改httpd默认端口号
  6. extjs学习(关于grid)
  7. 64位LINUX下hadoop2.2.0重新编译及安装步骤
  8. linux中的httpd源码安装方法
  9. PL/SQL 基础( 上 )
  10. 安装完成Fedora 15 LXDE 定制版后的操作