zoukankan      html  css  js  c++  java
  • C#中的static静态变量的用法

    静态全局变量

    定义在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量。

    特点
      A、该变量在全局数据区分配内存。
      B、初始化:如果不显式初始化,那么将被隐式初始化为0。

    静态局部变量

    定义:在局部变量前加上static关键字时,就定义了静态局部变量。

    特点
      A、该变量在全局数据区分配内存。
      B、初始化:如果不显式初始化,那么将被隐式初始化为0。
      C、它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。

    静态数据成员
    特点
      A、内存分配:在程序的全局数据区分配。
      B、初始化和定义:
        a、静态数据成员定义时要分配空间,所以不能在类声明中定义。
        b、为了避免在多个使用该类的源文件中,对其重复定义,所在,不能在类的头文件中
        定义。
        c、静态数据成员因为程序一开始运行就必需存在,所以其初始化的最佳位置在类的内部实现。
      C、特点
        a、对相于 public,protected,private 关键字的影响它和普通数据成员一样,
        b、因为其空间在全局数据区分配,属于所有本类的对象共享,所以,它不属于特定的类对象,在没产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它。
      D、访问形式
        a、 类对象名.静态数据成员名

          E、静态数据成员,主要用在类的所有实例都拥有的属性上。比如,对于一个存款类,帐号相对于每个实例都是不同的,但每个实例的利息是相同的。所以,应该把利息设为存款类的静态数据成员。这有两个好处,第一,不管定义多少个存款类对象,利息数据成员都共享分配在全局区的内存,所以节省存贮空间。第二,一旦利息需要改变时,只要改变一次,则所有存款类对象的利息全改变过来了,因为它们实际上是共用一个东西。
     

    静态成员函数
    特点
      A、静态成员函数与类相联系,不与类的对象相联系。
      B、静态成员函数不能访问非静态数据成员。原因很简单,非静态数据成员属于特定的类实例。
    作用
      主要用于对静态数据成员的操作。

    调用形式
      类对象名.静态成员函数名()

    static静态变量的实例与分析

     class class1
        {
            static int i = getNum();
            int j = getNum();
     
            static int num = 1;
            
            static int getNum()
            {
                return num;
            }
     
            static void Main(string[] args)
            {
                Console.WriteLine("i={0}",i);
                Console.WriteLine("j={0}", new class1().j);
                Console.Read();
            }
        }

    分析:Console.WriteLine("i={0}",i);这里i是static变量,而且类class1是第一次被引 用,要先为class1里面所有的static变量分配内存。尽管现在有超线程技术,但是指令在逻辑还是一条一条的按顺序执行的,所以先为static int i分配内存,并且在该内存中保持int的缺省值0,接着再为static int num 变量分配内存,值当然也为0。

    然后执行第二步,为变量赋值:先为static int i变量赋值,i=getNum(),看getNum里面的代码,就是return num,这个时候num的值是0,于是i就为0了。然后对变量num赋值,num=1;这行代码执行后,num就为1了。

    所以最后的结果为:

     i=0 j=1

    当以一次引用类的时候,会对类中的静态变量先按顺序进行分配内存空间,当全部分配完内存空间之后,在对静态变量按顺序赋值。

  • 相关阅读:
    我的WCF之旅(1):创建一个简单的WCF程序
    与众不同 windows phone (15) Media(媒体)之后台播放音频
    与众不同 windows phone (14) Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成
    与众不同 windows phone (10) Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息
    与众不同 windows phone (17) Graphic and Animation(画图和动画)
    与众不同 windows phone (5) Chooser(选择器)
    与众不同 windows phone (26) Contacts and Calendar(联系人和日历)
    与众不同 windows phone (7) Local Database(本地数据库)
    与众不同 windows phone (19) Device(设备)之陀螺仪传感器, Motion API
    与众不同 windows phone (16) Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单“应用程序...”和“共享...”关联, 与 Windows Phone 的图片中心集成
  • 原文地址:https://www.cnblogs.com/xiaohua92/p/5241121.html
Copyright © 2011-2022 走看看