加入收藏 | 设为首页 | 会员中心 | 我要投稿 滁州站长网 (https://www.0550zz.com/)- 智能边缘云、设备管理、微服务引擎、研发安全、云防火墙!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

c# static的全部用法收集梳理

发布时间:2023-06-14 10:00:12 所属栏目:语言 来源:未知
导读:    static的全部用法



   要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都
   static的全部用法
 
      要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的,就象short和long总是默认为int一样;我们通常声明一个变量:
 
      int a;
 
      string s;
 
      其实就是:
 
      auto int a;
 
      auto string s;
 
      而static变量的声明是:
 
      static int a;
 
      static string s;
 
      这样似乎可以更有利于理解auto和static是一对成对的关键字吧,就像private,protected,public一样;
 
      对于static的不理解,其实就是对于auto的不理解,因为它是更一般的;有的东西你天天在用,但未必就代表你真正了解它;auto的含义是由程序自动控制变量的生存周期,通常指的就是变量在进入其作用域的时候被分配,离开其作用域的时候被释放;而static就是不auto,变量在程序初始化时被分配,直到程序退出前才被释放;也就是static是按照程序的生命周期来分配释放变量的,而不是变量自己的生命周期;所以,像这样的例子:
 
      void func()
 
      {
 
          int a;
 
          static int b;
 
      }
 
      每一次调用该函数,变量a都是新的,因为它是在进入函数体的时候被分配,退出函数体的时候被释放,所以多个线程调用该函数,都会拥有各自独立的变量a,因为它总是要被重新分配的;而变量b不管你是否使用该函数,在程序初始化时就被分配的了,或者在第一次执行到它的声明的时候分配(不同的编译器可能不同),所以多个线程调用该函数的时候,总是访问同一个变量b,这也是在多线程编程中必须注意的!
 
  static的全部用法:
 
  1.类的静态成员:
 
  class A
 
  {
 
  private:
 
      static int s_;
 
  };
 
      在cpp中必须对它进行初始化:
 
  int A::s_ = 0;// 注意,这里没有static的修饰!
 
      类的静态成员是该类所有实例的共用成员,也就是在该类的范畴内是个全局变量,也可以理解为是一个名为A::s_的全局变量,只不过它是带有类安全属性的;道理很简单,因为它是在程序初始化的时候分配的,所以只分配一次,所以就是共用的;
 
      类的静态成员必须初始化,道理也是一样的,因为它是在程序初始化的时候分配的,所以必须有初始化,类中只是声明,在cpp中才是初始化,你可以在初始化的代码上放个断点,在程序执行main的第一条语句之前就会先走到那;如果你的静态成员是个类,那么就会调用到它的构造函数
 

(编辑:滁州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章