通常剛學習C#的人都會對static的使用有所困惑.....
通常剛學習C#的人都會對static的使用有所困惑.....
很多人可能都不知道與ststic相對的另外一個宣告修飾詞auto,許多剛接觸C#沒多久的朋友可能會覺得好像沒看過而困惑,因為這個修飾詞在平常宣告時可以不用打出來也就是說跟short和long默認為int的意思是一樣的,換言之她們的關係就跟private和public相同。
class ClassA
{
.........
void GetVar()
{
//auto int i;
int i;
static int t;
}
........
}
{
.........
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;
};
...{
private:
static int S;
};
三、類別的靜態函數
class ClassA
...{
private:
static void fun(int );
};
...{
private:
static void fun(int );
};
四、在該程序全域有效的變數
class ClassA
......{
void fun()
...{
int i;
static int I;
}
};
......{
void fun()
...{
int i;
static int I;
}
};
五、在該程序全域有效的函數
class ClassA
....{
static void fun()
....{
int i;
static int I;
}
};
....{
static void fun()
....{
int i;
static int I;
}
};
待續....