zoukankan      html  css  js  c++  java
  • C#中静态变量 静态类 静态成员

    静态变量与非静态变量的区别如下
    1.内存分配
    静态变量在应用程序初始化时,就存在于内存当中,直到它所在的类的程序运行结束时才消亡;
    而非静态变量需要被实例化后才会分配内存。
    2.生存周期
    静态变量生存周期为应用程序的存在周期;
    非静态变量的存在周期取决于实例化的类的存在周期。
    3.调用方式
    静态变量只能通过“类.静态变量名”调用,类的实例不能调用;
    非静态变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。
    4.共享方式
    静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值;
    非静态变量是局部变量,不共享的。
    5.访问方式

    静态成员不能访问非静态成员;
    非静态成员可以访问静态成员。

    静态变量在类装载的时候分配内存,以后创建的对象都使用的该内存,相应的操作也就是对这块内存进行操作。也可以看作是另类的全局变量。

    在WebSerivice中想只进行一次初始化,而不用每次都进行初始化这样占用大量资源。还可以对调用的服务进行管理,比如想把每次调用的服务进行排队执行,可以将想应信息放到Arraylist中,静态时钟中排队执行。

    下面转一篇对静态变量的文章。

    C#静态构造函数及静态变量
     

    静态构造函数:

    (1)用于对静态字段、只读字段等的初始化。              

    (2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。        

    (3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数

    (4)静态构造函数是不可继承的,而且不能被直接调用。            

    (5)如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。    

    (6)任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。  

    (7)如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。

    经典例子:

    1/**************************************************
    2C中静态变量的使用 - freelyWorld - freelyworld* 静 态 构 造 函 数 练 习
    3C中静态变量的使用 - freelyWorld - freelyworld* (1)①②③……为执行顺序
    4C中静态变量的使用 - freelyWorld - freelyworld* (2)输出结果: static A()
    5C中静态变量的使用 - freelyWorld - freelyworld* static B()
    6C中静态变量的使用 - freelyWorld - freelyworld* X = 1, Y = 2
    7C中静态变量的使用 - freelyWorld - freelyworld***************************************************/
    8C中静态变量的使用 - freelyWorld - freelyworldusing System;
    9C中静态变量的使用 - freelyWorld - freelyworldclass A
    10{
    11C中静态变量的使用 - freelyWorld - freelyworldpublic static int X;
    12C中静态变量的使用 - freelyWorld - freelyworld
    13C中静态变量的使用 - freelyWorld - freelyworldstatic A() //④ 执行完后返回到③
    14{
    15C中静态变量的使用 - freelyWorld - freelyworldX = B.Y + 1;
    16C中静态变量的使用 - freelyWorld - freelyworldConsole.WriteLine("static A()");
    17C中静态变量的使用 - freelyWorld - freelyworld}
    18C中静态变量的使用 - freelyWorld - freelyworld}
    19C中静态变量的使用 - freelyWorld - freelyworld
    20C中静态变量的使用 - freelyWorld - freelyworldclass B
    21{
    22C中静态变量的使用 - freelyWorld - freelyworldpublic static int Y = A.X + 1; //③ 调用了A的静态成员,
    23C中静态变量的使用 - freelyWorld - freelyworld// 转到A的静态构造函数---->
    24C中静态变量的使用 - freelyWorld - freelyworld
    25C中静态变量的使用 - freelyWorld - freelyworldstatic B() //② 如果带有初始值设定项的静态字段,
    26C中静态变量的使用 - freelyWorld - freelyworld// 执行该类的静态构造函数时,
    27C中静态变量的使用 - freelyWorld - freelyworld// 先要按照文本顺序执行那些初始值设定项。
    28C中静态变量的使用 - freelyWorld - freelyworld// 转到初始值设定项---->
    29{
    30C中静态变量的使用 - freelyWorld - freelyworldConsole.WriteLine("static B()");
    31C中静态变量的使用 - freelyWorld - freelyworld}
    32C中静态变量的使用 - freelyWorld - freelyworld
    33C中静态变量的使用 - freelyWorld - freelyworldstatic void Main() //① 程序入口,
    34C中静态变量的使用 - freelyWorld - freelyworld// 如果类中包含用来开始执行的 Main 方法,
    35C中静态变量的使用 - freelyWorld - freelyworld// 该类的静态构造函数将在调用 Main 方法之前执行。
    36C中静态变量的使用 - freelyWorld - freelyworld// 转到B的静态构造函数---->
    37C中静态变量的使用 - freelyWorld - freelyworld{
    38C中静态变量的使用 - freelyWorld - freelyworldConsole.WriteLine("X = {0}, Y = {1}", A.X, B.Y);//⑤ 输出结果
    39C中静态变量的使用 - freelyWorld - freelyworldConsole.ReadLine();
    40C中静态变量的使用 - freelyWorld - freelyworld}
    41C中静态变量的使用 - freelyWorld - freelyworld}

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    关于C#静态构造函数的几点说明

     
      静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。
      
    class SimpleClass
    {
        // Static constructor
        static SimpleClass()
         {
            //C中静态变量的使用 - freelyWorld - freelyworld
         }
    }

      在使用静态构造函数的时候应该注意几点:

      1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。
      
      2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。

      3、一个类只能有一个静态构造函数。

      4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。

      5、最多只运行一次。

      6、静态构造函数不可以被继承。

      7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
    Stay hungry, stay foolish
  • 相关阅读:
    .NET实现Excel文件的读写 未测试
    权限管理设计
    struts1中配置应用
    POJ 2139 Six Degrees of Cowvin Bacon(floyd)
    POJ 1751 Highways
    POJ 1698 Alice's Chance
    POJ 1018 Communication System
    POJ 1050 To the Max
    POJ 1002 4873279
    POJ 3084 Panic Room
  • 原文地址:https://www.cnblogs.com/xiao-hei/p/3884571.html
Copyright © 2011-2022 走看看