[C#]static & auto

  • 10058
  • 0
  • C#
  • 2009-02-18

通常剛學習C#的人都會對static的使用有所困惑.....

通常剛學習C#的人都會對static的使用有所困惑.....

很多人可能都不知道與ststic相對的另外一個宣告修飾詞auto,許多剛接觸C#沒多久的朋友可能會覺得好像沒看過而困惑,因為這個修飾詞在平常宣告時可以不用打出來也就是說跟short和long默認為int的意思是一樣的,換言之她們的關係就跟private和public相同。

class ClassA
{
    .........
    void GetVar()
    {
        //auto int i;
        int i;

          static int t;
    }

    ........
}

 

auto與static的不同

auto是由程式自動控制變數的生命週期,通常指的就是變數在進入其作用範圍的時候被分配,離開其作用範圍時被釋放;而static就是不auto,變數在程式開始時被載入記憶體,直到程式退出前才被釋放;也就是static是按照程式的生命週期來分配釋放變數的,而不是變數自己的生命週期‧

換言之auto變數的生命週期等於變數的作用範圍,而static變數的生命週期大約等於程式生命週期(當程式執行完畢或結束才會自記憶體釋放)....

那麼什麼時候會使用到static呢?

一、非同步程序

二、類別的靜態成員

class ClassA
     ...{
     private:
     static int S;
     }
;

 

三、類別的靜態函數

class ClassA
     ...{
     private:
     static void fun(int );
     }
;

 

四、在該程序全域有效的變數

class ClassA
......{
           void fun()
        ...{
                int i;
                static int I;
            }

       }
;

 

五、在該程全域有效的函數

class ClassA
....{
        static void fun()
        ....{
                int i;
                static int I;
            }

    }
;

 

待續....