在Init之前究竟执行了什么?
生活随笔
收集整理的這篇文章主要介紹了
在Init之前究竟执行了什么?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我認為:會實例化子控件并且把他們加入控件樹
上面代碼的注釋說,控件會在加入控件樹之前被初始化,因此我們要保證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();
???????????}
{
??????Control?control1?=?obj?as?Control;
??????if?(control1?!=?null)
??????{
????????????this.Controls.Add(control1);
??????}
}
?
上面代碼的注釋說,控件會在加入控件樹之前被初始化,因此我們要保證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之前究竟执行了什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转 23种开发模式一点就通
- 下一篇: sap 常用事务代码