asp.net static静态变量

asp教程.net的页面就是一个类,我们访问一个页面。就会在服务器上实例化一个该类的实例,来响应我们的请求。
在asp.net教程 C#中,static静态变量表示该变量属于静态的类,而不是类的实例。可以说是该类的所有实例共享一个static变量。

先来看一个测试实例

#include <iostream>
#include <iomanip>
using std::cout;
using std::endl;

long next();

int main() {
  for(int i = 0 ; i < 30 ; i++) {
    cout << std::setw(12) << next ();
  }
  cout << endl;
  return 0;
}

long next () {
  static long last = 0;
  last = last + 1;  
  return last;
}

输出结果

1           2           3           4           5           6
   7           8           9          10          11          12          13
      14          15          16          17          18          19          20
          21          22          23          24          25          26
  27          28          29          30

Application与static变量
Application是通过一个集合保存所有的对象。

强类型:
Application中保存的是object,对对象的保存和使用需要作cast动作。对于值类型更需要Box&UnBox。对性能的影响较大。
而static变量是强类型的对象。

线程同步:
Application将所有的对象放到一个集合,这样对访问集合中的任何对象都会锁定这个集合。
假如有Application["A"]、Application["B"]、Application["C"],有线程访问Application["A"]其他线程不能访问Application["B"] and Application["C"]。
而static变量,可以根据他们的作用分别放在不同的class当中。这样可以并行访问不同的static变量,而不存在线程安全问题。

 

使用静态变量来计算,平均运行的数字由用户输入

#include <iostream>
using namespace std;
 
int f(int i);
 
int main()
{
  int num;
 
  do {
    cout << "Enter numbers (-1 to quit): ";
    cin >> num;
    if(num != -1)
      cout << "average is: " << f(num) << "n";
   
  } while(num > -1);
 
  return 0;
}
 
int f(int i)
{
  static int sum = 0, count = 0;
 
  sum = sum + i;
 
  count++;
 
  return sum / count;
}

结果是

Enter numbers (-1 to quit): 1
average is: 1
Enter numbers (-1 to quit): 2
average is: 1
Enter numbers (-1 to quit): 3
average is: 2
Enter numbers (-1 to quit): 2
average is: 2
Enter numbers (-1 to quit): 1
average is: 1
Enter numbers (-1 to quit): 2
average is: 1
Enter numbers (-1 to quit): 3
average is: 2
Enter numbers (-1 to quit): -1

在类外初始化静态成员字段声明

#include <iostream>
using std::cout;
using std::endl;

class Box {
  public:
    Box() {
      cout << "Default constructor called" << endl;
      ++objectCount;
      length = width = height = 1.0;
    }

    Box(double lvalue, double wvalue, double hvalue) :
                              length(lvalue), width(wvalue), height(hvalue) {
      cout << "Box constructor called" << endl;
      ++objectCount;
    }

    double volume() const {
      return length * width * height;
    }

    int getObjectCount() const {return objectCount;}

  private:
    static int objectCount;
    double length;
    double width;
    double height;
};
int Box::objectCount = 0;

int main() {
  cout << endl;

  Box firstBox(17.0, 11.0, 5.0);
  cout << "Object count is " << firstBox.getObjectCount() << endl;
  Box boxes[5];
  cout << "Object count is " << firstBox.getObjectCount() << endl;

  cout << "Volume of first box = "
       << firstBox.volume()
       << endl;

  const int count = sizeof boxes/sizeof boxes[0];

  cout <<"The boxes array has " << count << " elements."
       << endl;

  cout <<"Each element occupies " << sizeof boxes[0] << " bytes."
       << endl;

  for(int i = 0 ; i < count ; i++)
    cout << "Volume of boxes[" << i << "] = "
         << boxes[i].volume()
         << endl;

  return 0;
}

结果为

Box constructor called
Object count is 1
Default constructor called
Default constructor called
Default constructor called
Default constructor called
Default constructor called
Object count is 6
Volume of first box = 935
The boxes array has 5 elements.
Each element occupies 24 bytes.
Volume of boxes[0] = 1
Volume of boxes[1] = 1
Volume of boxes[2] = 1
Volume of boxes[3] = 1
Volume of boxes[4] = 1

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

时间: 2024-10-26 17:32:14

asp.net static静态变量的相关文章

asp.net application static静态变量用法

asp教程.net application static静态变量用法 File: Global.asax <%@ Application Language="C#" ClassName="Global" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Collections.Generic" %> <

PHP static静态变量详解

PHP static静态变量 变量范围的另一个重要特性是静态变量(static variable).静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失.看看下面的例子: 例子 演示需要静态变量的例子 <?PHP     function Test()      {      $w3sky = 0;      echo $w3sky;      $w3sky++;      }      ?>  本函数没什么用处,因为每次调用时都会将 $w3sky 的值设为 0 并输出 &q

static 静态变量-iOS 的static静态变量

问题描述 iOS 的static静态变量 你好,我定义了一个静态变量 static int timeout = self.timeNumber; //倒计时时间 self.timeNumber 是int 型的. 这样赋值是错误的,请问怎么赋值给静态变量不会出错 因为 我这个timeout变量必须是static,否则NStimer就不会启动 解决方案 C++ 中的static静态变量static静态变量静态变量static 解决方案二: http://blog.csdn.net/wbw1985/a

Java中static静态变量的初始化完全解析_java

静态变量初始化顺序 1.简单规则 首先先看一段最普遍的JAVA代码: public class Test { public static Test1 t = new Test1(); public static int a = 0; public static int b; public static void main(String[] arg) { System.out.println(Test.a); System.out.println(Test.b); } } class Test1

static变量-static静态变量问题,菜鸟求大家伙给个答案

问题描述 static静态变量问题,菜鸟求大家伙给个答案 int main(void) { static int i=5; if(--i) { main(); cout<<i<<endl; } } 为什么输出结果是0000? 菜鸟求详解啊!么么哒 解决方案 4,3,2,1,0一共5个数,因为0的时候不进if了所以递归终止了,然后返回到上一次递归也就是i=1的时候,但是这时候实际上i的值是0了所以打印0并且换行,以此类推, i=2的递归,打印 0 换行 i=3的递归,打印 0 换行

C#中static静态变量的用法

原文:C#中static静态变量的用法 使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类.字段.方法.属性.运算符.事件和构造函数,但不能用于索引器.析构函数或类以外的类型   静态全局变量 定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量. 特点: A.该变量在全局数据区分配内存. B.初始化:如果不显式初始化,那么将被隐式初始化为0.   静态局部变量 定义:在局部变量前加上static关键字时,就定义了静态局

C#中static静态变量使用说明

使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类.字段.方法.属性.运算符.事件和构造函数,但不能用于索引器.析构函数或类以外的类型   静态全局变量 定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量. 特点: A.该变量在全局数据区分配内存. B.初始化:如果不显式初始化,那么将被隐式初始化为0.   静态局部变量 定义:在局部变量前加上static关键字时,就定义了静态局部变量. 特点: A.该变量在全局数据区

java static 静态变量初始化

java static 静态变量初始化 static final int NUMBER_OF_MONTHS = 12; static final float PI = (float) 22 / 7; 如果你想使一个静态变量在其它地方可以引用的话,如下 public static final int NUMBER_OF_MONTHS = 12; public static final float PI = (float) 22 / 7; 写在函数中 public class MainClass {

PHP static 静态变量和属性方法使用说明

变量与其它变量 明确区别的,下面我来给各位介绍 static 静态变量和属性方法及静态变量的引用与静态函数的用法,各位有需要了解的同学可参考. 静态变量 变量范围的另一个重要特性是静态变量(static variable).静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失.看看下面的例子: 例子 7-4. 演示需要静态变量的例子  代码如下 复制代码 <?php function Test () { $a = 0; echo $a; $a++; } ?>    本函数没什