我认为:会实例化子控件并且把他们加入控件树
上面代码的注释说,控件会在加入控件树之前被初始化,因此我们要保证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. intval0.57100 php_php中0,'',null,false,true,FLASE,TREU,array()的相等恒等学习
  2. C#中虚函数,抽象,接口的简单说明
  3. 未来的全能保姆机器人作文_保姆机器人作文500字
  4. R语言file_path_sans_ext函数剔除文件后缀实战
  5. Linux 下 svn 的使用
  6. MVC的概念及MVC 3.0开发环境
  7. CVPR 2021 | 澳洲国立大学提出基于模型的图像风格迁移
  8. 9.28 linux系统基础优化
  9. Coursera自动驾驶课程第7讲:Vehicle Lateral Control
  10. Oracle自定义类型
  11. 利用apache限制IP并发数和下载流量控制
  12. 基于组织目标采用合适的敏捷方法
  13. 随机森林算法原理简要总结
  14. NLP数据集:GLUE【CoLA(单句子分类)、SST-2(情感二分类)、MRPC、STS-B、QQP、MNLI、QNLI、RTE、WNLI】【知名模型都会在此基准上进行测试】
  15. 360手机卫士linux版,360手机卫士极速版
  16. C++STL常用算法adjacent_find
  17. 0x0000050蓝屏srvsys_win7电脑出现蓝屏0x00000050提示srv.sys如何解决
  18. 计算机系统的位的描述性定义,计算机系统中,“位”的描述性定义是________。
  19. 英语在线教育机构争战AI风口,为何雷声大雨点小?
  20. 驾考计算机播报原理,科目三电子路考流程详解 考驾照的都看看!

热门文章

  1. mysql 慢查询sql实例_Mysql sql慢查询监控脚本代码实例
  2. 虚拟机中RedHat Linux系统安装
  3. python搭建django
  4. 面向对象开发===继承特点
  5. Replica small data to PostgreSQL from Oracle's Big table
  6. 补第一阶段冲刺站立会议1(应发表日期5月13日)
  7. C# HttpRequest基础连接已经关闭: 接收时发生意外错误
  8. 获得本机的IP,掩码和网关
  9. gan semi conductor
  10. morality and strength