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
  • 相关阅读:
    PHP中的list方法
    PHP通过引用传递参数
    PHP浮点数的精确计算BCMath
    cssViewer牛逼的chrome插件
    Chrome浏览器插件VisualEvent,可以方便的查看页面绑定的事件
    Javascript水平提升
    360良心制作fonts.useso.com
    PHP函数htmlspecialchars_decode
    ecshop移动端支付宝支付对接
    转:阿里旺旺导致python安装包失败的解决办法
  • 原文地址:https://www.cnblogs.com/zzPrince/p/3361523.html
Copyright © 2011-2022 走看看