一个C#2.0中执行顺序问题
下面有这么一个例子:
public partial class Default7 : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
this.Button1.Click += delegate { Response.Write(1 + " <br> "); };
base.OnInit(e);
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(2 + " <br> ");
}
}
得到的结果是
2
1
为什么不是先执行匿名函数,而是先执行Resopnse.Write(2+ " <br> ");为什么结果不是
1
2
呢?
------解决方案--------------------protected override void OnInit(EventArgs e)
{
this.Button1.Click += delegate { Response.Write(1 + " <br> "); };
base.OnInit(e);
}
是在页面生成的时候发生。
------------
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(2 + " <br> ");
}
他的定义是在类构造的时候就生成了,我的想法是winform不知道webform是不是这样,不过应该差不多
------解决方案--------------------点出按钮时执行Click事件,2
同时由于是服务器事件,
页面刷新OnInit()1
OnLoad()
------解决方案--------------------Click事件同时触发两个动作,应该是C#的内部机制来决定谁先执行的
------解决方案--------------------Button1 Click之后的执行顺序为
OnInit-> Button1_Click-> delegate{Response.Write(1 + " <br> "); }
每次Click都会为Button1重新添加委托,也就是说第一次加载时的那个委托并不保存,而只是将该事件添加到Button1的响应队列里,优先级应该在Button1_Click之后
------解决方案--------------------protected override void OnInit(EventArgs e)
//初始化页面时执行
protected void Button1_Click(object sender, EventArgs e)
//双击后才执行
C#的运行机制可能是先执行点击事件然后再执行页面加载事件。。
------解决方案--------------------《C#高级编程》里有这样一句话:
多播委托,不能保证调用方法的顺序
------解决方案--------------------C#的底层机制来决定,我们记住这些规律就行了
------解决方案--------------------up