C 靜態變數

2021-05-23 01:53:52 字數 1743 閱讀 8064

在c#程式中,沒有全域性變數的概念,這意味著所有的成員變數只有該類的實 例才能操作這些資料,這起到了「資訊隱藏」的作用。但有些時候,這樣做卻不是個明智的選擇。

假設我們要定義乙個圖書類,要求該類能儲存圖書的數量,即每增加一本圖書(定義乙個例項), 圖書的數量應該加1。如果沒有靜態變數,我們需要將圖書的數量儲存在每本圖書(例項)裡,然而,這樣的變數要在不同圖書(例項)裡重複儲存,圖書(例項) 數量少的話,我們還能接受,如果圖書(例項)數量較多的話,比如成千上萬,我們無法想象這要造成多少資源(如記憶體、磁碟空間)的浪費,更讓人無法忍受的 是:因為圖書(例項)的數量要儲存在每本圖書(例項)裡,該值肯定是不同的。要使這些圖書(例項)中儲存的圖書(例項)數量一致,我們必須在每增加一本新 書(生成乙個新例項)時,修改其他所有圖書(例項)中儲存的該值。oh,my god!你會重新嚮往面向過程的程式設計方法,嚮往擁有全域性變數的時代。但,這種局面不會出現,因為c#中為你準備好了另外一種變數型別:靜態變數。它在 類中類似全域性變數,儲存類的公共資訊,所有該類的例項(物件)共享該值。

宣告靜態變數的語法如下:

《訪問修飾符》static 資料型別 變數名;

這裡的訪問修飾符跟類的其它成員一樣,可以是public,protected,private或internal等。

在普通的成員變數前加static關鍵字,就變成了靜態變數。靜態變數和例項變數儲存方式 不同,靜態變數在宣告開始,就一直儲存在記憶體中,直到整個程式終止。而例項成員在建立物件時分配記憶體,並儲存乙個資料副本。所以靜態成員變數認為是屬於類 的,而不是物件。

靜態變數與例項變數的區別如下:

1.記憶體分配

靜態變數在應用程式初始化時,就存在於記憶體當中,直到它所在的類的程式執行結束時才消亡;

而例項變數需要被實 例化後才會分配記憶體。

2.生存週期

靜態變數生存週期為應用程式的存在週期;

例項變數的存在週期取決於例項化的類的存在周 期。

3.呼叫方式

靜態變數只能通過「類.靜態變數名」呼叫,類的例項不能呼叫;

例項變數當該變數所在的類被例項化後,可通 過例項化的類名直接訪問。

4.共享方式

靜態變數是全域性變數,被所有類的例項物件共享,即乙個例項的改變了靜態變數的值,其他同類的實 例讀到的就是變化後的值;

例項變數是區域性變數,不共享的。

5.訪問方式

靜態成員不能訪問例項成員;

例項成員可以 訪問靜態成員。

靜態變數在類裝載的時候分配記憶體, 以後建立的物件都使用的該記憶體,相應的操作也就是對這塊記憶體進行操作。也可以看作是另類的全域性變數。

所以:靜態變數只的值只會初始化一次,後面每次訪問,都是上次處理過的值,(即使是在乙個函 數內部)。 例項變數每次都初始化。

靜態變數必須使用類名來引用,而不 能使用類的例項,因為,靜態變數不屬於任何例項,而是共有的。我們可以打個比方:在乙個班級中,有些物品是個人的,我們想使用時,必須指出物品的所有者, 比如說「王三的自行車」,在c#程式中我們可以使用:王三.自行車的格式。有些物品是大家共有的物品,不能以個人名義使用,而是用班級的名義使用,比如班 集體出資買的籃球,只能說:「班級的籃球」,而不能說:「王三的籃球」。這絕對是不行的,這對其他人絕對是不公平的,我們可以聯想到許多**汙吏就是使用 了不屬於自己的東西,或以個人名義使用公家的東西而葬送了自己。

說一句有用的就是:靜態變數是用類名來引用它。即:類名.靜態變數名;

舉個具體的例子如下:

檢視**插入快取的id也是插入資料庫那條資料id 賦值給乙個變數..要出現這種情況,除非是賦值後 原id被改變了.....

C 靜態變數

在c 程式中,沒有全域性變數的概念,這意味著所有的成員變數只有該類的例項才能操作這些資料,這起到了 資訊隱藏 的作用。但有些時候,這樣做卻不是個明智的選擇。假設我們要定義乙個圖書類,要求該類能儲存圖書的數量,即每增加一本圖書 定義乙個例項 圖書的數量應該加1。如果沒有靜態變數,我們需要將圖書的數量儲...

C 靜態變數

靜態變數 型別說明符是static。靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區 在靜態儲存區內分配儲存單元 該區域中的資料在整個程式的執行期間一直占用這些儲存空間 在程式整個執行期間都不釋放 也可以認為是其記憶體位址不變,直到整個程式執行結束 相反,而auto自動變數,即動態區域性變...

C 靜態變數

在c 程式中,沒有全域性變數的概念,這意味著所有的成員變數只有該類的例項才能操作這些資料,這起到了 資訊隱藏 的作用。但有些時候,這樣做卻不是個明智的選擇。假設我們要定義乙個圖書類,要求該類能儲存圖書的數量,即每增加一本圖書 定義乙個例項 圖書的數量應該加1。如果沒有靜態變數,我們需要將圖書的數量儲...