asp.net中的static变量用法介绍

由于我们每次访问ASP.NET页面都是一个全新的对象,而不是我们上一次访问的对象。所以上次页面访问时我们对页面中变量的改动都没有保留。遇到这个问题的时候,很多初学者的直觉就是将这个变量申明为static,自己在测试的时候发现还真的保留住了页面的状态。窃喜之余没有发现这又有引入了另外一个错误。因为你要的只是页面能保留住状态,而这个状态是针对一个客户端的(session的效果)。而得到的结果是只要一个客户端改变了该值所有的其他客户端都受到了影响(如同Applicatin的效果)。这种情况下,需要的极有可能就是个ViewState或者是Session。
Application与static变量

要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的,就象short和long总是默认为int一样;我们
Application是通过一个集合保存所有的对象。

强类型:

  Application中保存的是object,对对象的保存和使用需要作cast动作。对于值类型更需要Box&UnBox。对性能的影响较大。
  而static变量是强类型的对象。
  线程同步:
  Application将所有的对象放到一个集合,这样对访问集合中的任何对象都会锁定这个集合。
假如有Application["A"]、Application["B"]、Application["C"],有线程访问Application["A"]其他线程不能访问Application["B"] and Application["C"]。
  而static变量,可以根据他们的作用分别放在不同的class当中。这样可以并行访问不同的static变量,而不存在线程安全问题。

例子:

 代码如下 复制代码

protected void Page_Load(object sender, EventArgs e)  

{  

//直接使用“类名.成员”的格式,不能使用“对象名.成员”的格式,这点与JAVA不一样,JAVA两种都可以使用  

Response.Write(Chinese.Country);   

}  

 

 class Chinese  

 {  

public static string Country = "中国";  

public void getCountry()  

{  

//类中的成员方法也可以直接访问静态成员变量  

HttpContext.Current.Response.Write("你好!" + Country);  

}  

需要注意的是:不能把任何方法体内的变量声明为静态,如下面这样是不行的:

 代码如下 复制代码

public void getCountry()  

{  

//类中的成员方法也可以直接访问静态成员变量  

HttpContext.Current.Response.Write("你好!" + Country);  

static int i = 1;  

静态方法

我们有时也希望不必创建对象就可以调用某个方法,换句话说也就是使该方法不必和对象绑定在一起。要实现这样的效果,只需要在类中定义的方法前加上static关键字就可以了,我们称这种方法为静态成员方法,还可以在类的非静态成员方法中象访问其他静态方法一样去访问这个静态方法,例子:

 代码如下 复制代码

protected void Page_Load(object sender, EventArgs e)  

{   

Chinese.getCountry();  

}  

 

 class Chinese  

 {  

public static void getCountry()  

{  

HttpContext.Current.Response.Write("你好!中国");  

}  

通常声明一个变量:

 代码如下 复制代码

int a;   

string s;  

其实就是:

 代码如下 复制代码

auto int a;   

auto string s;  

而static变量的声明是:

 代码如下 复制代码

static int a;   

static string s;  

友情提示:
  1. 对static变量,做lock时。可以通过lock(typeof(classname))来锁定该变量所在的类的类型,达到线程同步的目的。
  2. 由于Aplication,static member是全局变量,而我们是在多线程服务器环境写程序,对他们的使用需要注意线程安全的问题。

时间: 2024-09-15 11:18:34

asp.net中的static变量用法介绍的相关文章

javascript中var声明变量用法介绍

var 语句声明变量. var variable1 [ = value1 ] [, variable2 [ = value2], ...] 参数 variable, variable2 被声明的变量的名字. value, value2 赋给变量的初始化值. 说明 使用 var 语句来声明变量.这些变量可以在声明时或声明后在脚本中被赋值 一个关于var变量的问题 一个朋友问了一个js问题, 一段看不出有任何问题的代码, 在ie下报错:"object doesn't support this pro

asp.net中使用静态变量

asp.net|变量|静态 在asp.net中使用静态变量要比application更好的选择在传统的asp页面中,我们需要利用application变量传递一些特殊变量,在asp.net中任何页面都可以是类,Global.asax也不例外.我们只需要在Global.asax加入类名.  <%@ Application Classname="MyGlobals" %>然后我们定义几个静态变量.在vb.net中使用shared在C#中使用staticVB:<Script

Python中的with...as用法介绍

  这篇文章主要介绍了Python中的with...as用法介绍,本文直接给出用法实例,需要的朋友可以参考下 这个语法是用来代替传统的try...finally语法的. 代码如下: with EXPRESSION [ as VARIABLE] WITH-BLOCK 基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法. 紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量.当with后面的

Asp.Net中索引器的用法分析_实用技巧

本文实例分析了Asp.Net中索引器的用法.分享给大家供大家参考.具体如下: 索引器定义类似于属性,但其功能与属性并不相同.索引器提供一种特殊的方法编写get和set访问器.属性可以像访问字段一样访问对象的数据,索引器可以使用户像访问数组一样访问类成员. 一.索引器特性 1.get 访问器返回值.set 访问器分配值. 2.this 关键字用于定义索引器. 3.value 关键字用于定义由 set 索引器分配的值. 4.索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制. 5.索引器可

java中的static的用法

问题描述 java中的static的用法 为什么我不在class Book前面加static 这个代码会报错list.add(new Book(123, "java编程思想")); 加上之后就不会报错了 解决方案 BOOk只是内部类,静态方法在类加载时加载,其他的在实例化类时加载, 也就是main加载在book之前,不能调用不存在的东西吧 解决方案二: Java之static用法(详解)java中static的用法(一)静态成员变量Java Static 用法总结 解决方案三: 鼠标放

ASP.NET中Global和URLReWrite用法

 本文实例讲述了ASP.NET中Global和URLReWrite用法.分享给大家供大家参考.具体如下: Global.asax: 有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务. 重点了解:application_Start; application_BeginRequest; application_Error; ① application_Start:自从服务器启动起来,网站第一次被访

ASP.NET中Application全局对象用法实例浅析

 本文实例讲述了ASP.NET中Application全局对象用法.分享给大家供大家参考.具体如下: Application是应用全局对象,被全体共享.无论通过哪个页面操作Application,另一个页面都可以读取Application信息. 由于Application是共享的,操作之前先Lock,操作完成后UnLock. 在一个页面设置数据: 1 2 3 Application.Lock(); Application.Set("address", "上海");

Excel2007中网格线的基本用法介绍

Excel2007中网格线的基本用法介绍 Excel2007中的网格线在编辑.打印操作中都会用到.下面讲解Excel2007软件中网格线的一些基本用法. 1.隐藏/显示网格线 通过"视图"选项卡菜单中的"网格线"复选框开关,你可以设置网格线在编辑表时候的显示与否,   2.打印输出网格线设置 Excel中默认的网格线在打印时候是不会输出的,除非你进行了单元格的边框设置.设置方法:"开始"选项卡菜单中"字体"栏的"边框

【类中的static变量在栈中吗?】

问题描述 [类中的static变量在栈中吗?] 解决方案 在静态区中,是一个独立的区域,和堆.栈并列的 解决方案二: 数据区,跟全局变量等在一个sector 解决方案三: 局部变量: 栈区 局部静态变量:静态区 全局变量: 静态区的常量区 全局静态变量:静态区 内存分四个区:静态区,栈区,堆区,代码区 解决方案四: 当然不在,类中的一切变量都在堆上.堆栈上只有函数的局部变量. 解决方案五: 这个其实很好理解,都不需要死记硬背,也不需要看书. 一说你就明白了.为什么要堆栈?因为函数允许嵌套调用,所