关于这个静态变量,平时自己没有太认真的去认识。最近调项目的bug,让我重新认识了静态变量的特点。

其实,我们一直都在说:静态变量只在类第一次初始化的时候进行初始化,以后都不初始化

很简单的一句话,但是我们有没有结合“网站”的特点进行理解??看下面一段代码

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Web;
 4 using System.Web.UI;
 5 using System.Web.UI.WebControls;
 6 
 7 namespace WebApplication1
 8 {
 9     public partial class _Default : System.Web.UI.Page
10     {
11         public static string UserDepartment ="默认部门A";
12         public string UserID;
13         protected void Page_Load(object sender, EventArgs e)
14         {
15             UserID = Session["UserID"].ToString();
16             if ("00001" == UserID)
17             {
18                 UserDepartment = "人力资源部门";
19             }
20         }
21     }
22 }
View Code

这段代码中,根据登陆用户的ID信息,来确定这个用户的部门信息。我们将UserDepartment设置为了静态变量。问题出现了:

当第一个用户登陆之后,UserDepartment初始化为“默认部门A”,如果这个用户的ID为“00001”,那么这个类的静态变量就被修改了,改为“人力资源部门”。

注意:这是一个网站,网站上的逻辑代码在不停的运行,这个类的信息也很有可能被其它用户所访问。所以,当其它非“00001”用户访问该网站的这个页面的时候,加载这个页面类_Default,UserDepartment为这个类的静态变量,so不会再次初始化。所以,UserDepartment的值是“人力资源部门”,而且以后所以的用户登录,UserDepartment这个变量的值都不会再变化了。

为什么会出现这种情况呢?因为我们错用了static修饰了UserDepartment。

静态变量之所以为静态,其含义就是这个变量是这个类的固有属性,除非你手动修改这个固有属性,否则它不会发生改变,而且不会多次进行初始化。他是服务器级别的全局静态变量信息。对于静态变量我们要了解它的特点并且合理的使用。

非静态变量则不一样,它根据每一次请求出过来的参数的不同而改变,所以需要每次加载类的时候首先对他们进行初始化。

深入一点,看看这个http://www.cnblogs.com/meyer/archive/2004/04/27/7846.html

posted on 2013-10-10 16:27  AzzStyle  阅读(8140)  评论(0编辑  收藏  举报