靜態變數和非靜態變數

來源:互聯網
上載者:User

靜態變數和非靜態變數
在c裡面都是靜態.

在c#裡對於類裡面的任何非靜態成員,要用就必須有對象應用。 
  class   A 
  { 
      static   int   a; 
               int   b; 
  } 
  main 
  {  
        int   i   =   0; 
        A   classA   =   new  A(); 
        //要用b就必須寫成 
        classA.b   =   i; 
        //要用a就必須寫成 
        A.a   =   i; 
        //看出來沒有,classA是對象,而A是類; 
  }  
   
  

理論部分:
一.靜態變數和非靜態變數的基本概念
  
   資料成員包括:靜態變數和非靜態變數兩種
 
   A 靜態變數:帶有static 修飾符的變數稱為靜態變數。
   B 非表態變數:不帶有static修飾符聲明的變數稱為執行個體變數。

二. 兩都的一些區別
     class test
     {
            static int b=0;        //靜態變數
            int a=0;                 //非靜態變數

     }
     1.記憶體配置的區別:靜態變數定義時就會存在於記憶體當中,直到它所在的類的程式運行結束之時它都將一直存在;而非靜態變數需要被執行個體化後才會分配記憶體,它的存在周期取決於執行個體化的類的生存周期。
       所以他們的調用方式也不相同:
       靜態變數:可以(只能)通過類本身.靜態變數名,類的執行個體是不能調用的。
       非靜態變數: 當該變數所在的類被執行個體化後,可以通過執行個體化的類名來訪問。
       (另外靜態成員不能訪問非靜態成員;非靜態成員可以訪問靜態成員)
             test.b=2; //OK
             test t=new test();
             t.a=0;      //OK
             t.b=3 ;      //Error 編繹時會出錯 無法使用執行個體引用訪問靜態成員

     2. 兩者值的共用問題: 靜態變數被所有類的執行個體對象共用,即一個執行個體的改變了靜態變數的值,其他同類的執行個體讀到的就是變化後的值。非靜態變數是不共用的。
        ex:下面的最後的輸出結果是:10,0
        class Class1
       {
        public  static int cs1=0;
        public int cs3=0;
        }
        class Class2
       {
              public void a()
              {
                       Console.WriteLine(Class1.cs1.ToString());

// 因cs1是靜態變數,所以當類Program修改cs1=10後,其它類的執行個體讀到的值就是修改後的值10,所以此處輸出的是:10
                       Class1 cc = new Class1();
                       Console.WriteLine(cc.cs3.ToString()); 

 //雖然類Program修改值cs3=34;但因cs3在class1類中是非靜態變數,它的生存周期於執行個體化他的類的周期相同,所以當用類名ct執行個體結束後其值也不會存在於記憶體當中,當此類用另一個類名cc來執行個體化後調用變數cs3,其值仍是非靜態變數初始化的值0.
               }
        }
        class Program
       {
         static void Main(string[] args)
        {
            Class1.cs1 = 10;
            Class1 ct = new Class1();
            ct.cs3 = 34;
            Class2 cm = new Class2();
            cm.a();  
         }
       }
      

 

類名.靜態變數名

執行個體化的名.非靜態變數名

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.