我们接着看第二个类:
这些都是实例化一些对象的,我们重点看下BuildControlLabel1函数,
分别创建Label类型和Page类型的引用.
将send转型,因为我们知道DataBinding事件的发送者是Label控件嘛..
BindingContainer代表数据源容器,也是就数据是属于哪个对象的.
然后将DateTime.Now的值赋给Label控件的Text属性,没什么好说的
虚函数重写,首先调用框架的初始化函数,接着构造控件树,AddWrappedFileDependencies,我们回到该类的头部.
AppRelativeVirtualPath指明该页的虚拟路径,如果没有初始化,那么初始化他.
构造一个dependencies的string数组,GetWrappedFileDependencies函数说明该窗体页的依赖文件.
设置@__initialized为true表明该页已被初始化.
再回到函数,接着往下看,
this.Request.ValidateInput(); //验证输入
查看msdn,检索由运行时生成的 Page 对象生成的哈希代码。这种哈希代码对于 Page 对象的控件层次结构是唯一的.
也就是说该散列代码标识页面控件层次结构.
我在default.aspx页中随便添加一个控件,重新编译该页面,发现该值并没改变,说明他是唯一的,大家可以自行实验.
下面我们来看第二个类,在看之前,不知道大家有没发现,如果我往default.aspx页中添加控件,重新编译,asp.net会重新生成相关的类,如果我不改变页面结构,再次提交请求,asp.net不会重新生成类.
打开App_Web_XXXXXXXX.1.cs和我们的代码隐藏文件基本相同,App_Web_XXXXXXXX.2.cs里面调用了一个工厂方法.正如他的名字所暗示的FastObjectFactory,这是一个快速工厂,避免了反射带来的性能损失.并返回该页面的实例.
工厂方法的作用也是就将实例化一个类的过程交给工厂类来完成.
总结:
问题:
Page.Load+=new EventHandler(Page_Load)
在哪个函数里面注册的?
希望高手指点...
Code
这些都是实例化一些对象的,我们重点看下BuildControlLabel1函数,
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private global::System.Web.UI.WebControls.Label @__BuildControlLabel1() {
global::System.Web.UI.WebControls.Label @__ctrl;
#line 13 "F:\WebSite8\Default.aspx"
@__ctrl = new global::System.Web.UI.WebControls.Label();
#line default
#line hidden
this.Label1 = @__ctrl;
@__ctrl.ApplyStyleSheetSkin(this);
#line 13 "F:\WebSite8\Default.aspx"
@__ctrl.ID = "Label1";
#line default
#line hidden
#line 13 "F:\WebSite8\Default.aspx"
@__ctrl.DataBinding += new System.EventHandler(this.@__DataBindingLabel1);
#line default
#line hidden
return @__ctrl;
}
private global::System.Web.UI.WebControls.Label @__BuildControlLabel1() {
global::System.Web.UI.WebControls.Label @__ctrl;
#line 13 "F:\WebSite8\Default.aspx"
@__ctrl = new global::System.Web.UI.WebControls.Label();
#line default
#line hidden
this.Label1 = @__ctrl;
@__ctrl.ApplyStyleSheetSkin(this);
#line 13 "F:\WebSite8\Default.aspx"
@__ctrl.ID = "Label1";
#line default
#line hidden
#line 13 "F:\WebSite8\Default.aspx"
@__ctrl.DataBinding += new System.EventHandler(this.@__DataBindingLabel1);
#line default
#line hidden
return @__ctrl;
}
首先,定义各一个Label类型的引用@__ctrl,然后实例化Label对象,并赋给该引用.
如果你对引用不太熟悉,你可以想象下,家里厨房中有个瓶子,你给瓶子贴上标签,这个标签就相当于引用,这个标签代表了这个瓶子.
然后,this.Label1=@__ctrl,前面我们已经知道,Label1是Label类型的,那么把一个引用赋给另一个引用又代表什么呢?
既然,@__ctrl代表了一个瓶子,this.Label1=@__ctrl,说明Label1和@__ctrl代表的是同一样东西,相当于给瓶子再贴个标签.
接着往下看,
@__ctrl.ApplyStyleSheetSkin(this); //应用皮肤
@__ctrl.DataBinding += new System.EventHandler(this.@__DataBindingLabel1);
指定DataBinding事件的事件处理函数this.@__DataBindingLabel1
public void @__DataBindingLabel1(object sender, System.EventArgs e) {
System.Web.UI.WebControls.Label dataBindingExpressionBuilderTarget;
System.Web.UI.Page Container;
dataBindingExpressionBuilderTarget = ((System.Web.UI.WebControls.Label)(sender));
Container = ((System.Web.UI.Page)(dataBindingExpressionBuilderTarget.BindingContainer));
#line 13 "F:\WebSite8\Default.aspx"
dataBindingExpressionBuilderTarget.Text = System.Convert.ToString( DateTime.Now , System.Globalization.CultureInfo.CurrentCulture);
#line default
#line hidden
System.Web.UI.WebControls.Label dataBindingExpressionBuilderTarget;
System.Web.UI.Page Container;
dataBindingExpressionBuilderTarget = ((System.Web.UI.WebControls.Label)(sender));
Container = ((System.Web.UI.Page)(dataBindingExpressionBuilderTarget.BindingContainer));
#line 13 "F:\WebSite8\Default.aspx"
dataBindingExpressionBuilderTarget.Text = System.Convert.ToString( DateTime.Now , System.Globalization.CultureInfo.CurrentCulture);
#line default
#line hidden
分别创建Label类型和Page类型的引用.
将send转型,因为我们知道DataBinding事件的发送者是Label控件嘛..
BindingContainer代表数据源容器,也是就数据是属于哪个对象的.
然后将DateTime.Now的值赋给Label控件的Text属性,没什么好说的
protected override void FrameworkInitialize() {
base.FrameworkInitialize();
this.@__BuildControlTree(this);
this.AddWrappedFileDependencies(global::ASP.default_aspx.@__fileDependencies);
this.Request.ValidateInput();
}
base.FrameworkInitialize();
this.@__BuildControlTree(this);
this.AddWrappedFileDependencies(global::ASP.default_aspx.@__fileDependencies);
this.Request.ValidateInput();
}
虚函数重写,首先调用框架的初始化函数,接着构造控件树,AddWrappedFileDependencies,我们回到该类的头部.
private static bool @__initialized;
private static object @__fileDependencies;
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public default_aspx() {
string[] dependencies;
#line 912304 "F:\WebSite8\Default.aspx.cs"
((global::System.Web.UI.Page)(this)).AppRelativeVirtualPath = "~/Default.aspx";
#line default
#line hidden
if ((global::ASP.default_aspx.@__initialized == false)) {
dependencies = new string[2];
dependencies[0] = "~/Default.aspx";
dependencies[1] = "~/Default.aspx.cs";
global::ASP.default_aspx.@__fileDependencies = this.GetWrappedFileDependencies(dependencies);
global::ASP.default_aspx.@__initialized = true;
}
this.Server.ScriptTimeout = 30000000;
private static object @__fileDependencies;
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public default_aspx() {
string[] dependencies;
#line 912304 "F:\WebSite8\Default.aspx.cs"
((global::System.Web.UI.Page)(this)).AppRelativeVirtualPath = "~/Default.aspx";
#line default
#line hidden
if ((global::ASP.default_aspx.@__initialized == false)) {
dependencies = new string[2];
dependencies[0] = "~/Default.aspx";
dependencies[1] = "~/Default.aspx.cs";
global::ASP.default_aspx.@__fileDependencies = this.GetWrappedFileDependencies(dependencies);
global::ASP.default_aspx.@__initialized = true;
}
this.Server.ScriptTimeout = 30000000;
AppRelativeVirtualPath指明该页的虚拟路径,如果没有初始化,那么初始化他.
构造一个dependencies的string数组,GetWrappedFileDependencies函数说明该窗体页的依赖文件.
设置@__initialized为true表明该页已被初始化.
再回到函数,接着往下看,
this.Request.ValidateInput(); //验证输入
public override int GetTypeHashCode() {
return -324718635;
}
return -324718635;
}
查看msdn,检索由运行时生成的 Page 对象生成的哈希代码。这种哈希代码对于 Page 对象的控件层次结构是唯一的.
也就是说该散列代码标识页面控件层次结构.
我在default.aspx页中随便添加一个控件,重新编译该页面,发现该值并没改变,说明他是唯一的,大家可以自行实验.
public override void ProcessRequest(System.Web.HttpContext context) {
base.ProcessRequest(context);
处理请求...base.ProcessRequest(context);
下面我们来看第二个类,在看之前,不知道大家有没发现,如果我往default.aspx页中添加控件,重新编译,asp.net会重新生成相关的类,如果我不改变页面结构,再次提交请求,asp.net不会重新生成类.
打开App_Web_XXXXXXXX.1.cs和我们的代码隐藏文件基本相同,App_Web_XXXXXXXX.2.cs里面调用了一个工厂方法.正如他的名字所暗示的FastObjectFactory,这是一个快速工厂,避免了反射带来的性能损失.并返回该页面的实例.
工厂方法的作用也是就将实例化一个类的过程交给工厂类来完成.
总结:
问题:
Page.Load+=new EventHandler(Page_Load)
在哪个函数里面注册的?
希望高手指点...
h
o
n
e
y