zoukankan      html  css  js  c++  java
  • 关于C#静态变量初始化问题

    关于这个静态变量,平时自己没有太认真的去认识。最近调项目的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

    作者水平有限,错误和不当表述欢迎读者给出指正和建议
    联系邮箱wangzhen199009@126.com
  • 相关阅读:
    MongoDB基础之五:游标
    SQLSERVER 中实现类似Mysql的 INSERT ON DUPLICATE KEY UPDATE
    统计C语言程序行数
    作业(一)
    无法获取有关Windows NT 组用户‘组用户’的信息,错误代码0x5(Microsoft SQL Server,错误:15404)
    DELETE与TRUNCATE的区别
    SQL Server显式事务与隐式事务
    SQL Server去掉字段内的双引号
    AlwaysOn与数据库镜像端点问题
    AlwaysOn数据同步暂停及回退技术
  • 原文地址:https://www.cnblogs.com/zzPrince/p/3361523.html
Copyright © 2011-2022 走看看