using System; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; public partial class _Default : System.Web.UI.Page 

    private static int sum=0; 
    protected void Button1_Click(object sender, EventArgs e) 
    {         sum++; 
        Label1.Text = sum.ToString(); 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 
        Label1.Text = sum.ToString(); 
    } 

真的想不明白这个sum静态变量~!~ 
为什么关了浏览器之后这个sum还是之前累加后的值. 
还有页面的生命周期又是一个怎样的过程. 
希望能得到全面的解释

解决方案 »

  1.   

    页面生存周期是对Page实例而言的...而静态成员是实例无关的,它是属于类型本身的...你关浏览器不会影响到静态成员...事实上不用你关,在你下载页面完成时该Page实例已销毁...
      

  2.   

    所以严重不建议在页面中定义静态成员...ASP.NET程序都应该尽量少用,基本上需要保持值的都可以用Cookies、Session、ViewState和配置文件解决...
      

  3.   

    好的,那.net freamwork是如何管理这些静态成员的
      

  4.   

    真的想不明白这个sum静态变量~!~ 
    为什么关了浏览器之后这个sum还是之前累加后的值. 
    还有页面的生命周期又是一个怎样的过程. 
    希望能得到全面的解释
    --------------------------------------------
    如果你重启了Web服务器,这个sum就会恢复到最开始的值了。每个用户打开这个页面,会创建页面类的一个实例,不同的客户端所创建的页面对象不同而已,但是都是同一个类的实例,所以是共享静态字段的。和普通的类一样。至于你问的.net freamwork是如何管理这些静态成员的,这个是你理解上的问题,你的Web程序在服务器端也是一个应用程序,和你写的普通的应用程序也没有太本质的区别。就好像你在你写的一个应用程序中,创建了两个类的实例,这个两个类的实例共享类的静态字段。
      

  5.   

    哦...
    那就是sum会在page实例中共享
    也就是不同的客户可以访问同一个sum