在c#程式中,沒有全域性變數的概念,這意味著所有的成員變數只有該類的例項才能操作這些資料,這起到了「資訊隱藏」的作用。但有些時候,這樣做卻不是個明智的選擇。
假設我們要定義乙個圖書類,要求該類能儲存圖書的數量,即每增加一本圖書(定義乙個例項),圖書的數量應該加1。如果沒有靜態變數,我們需要將圖書的數量儲存在每本圖書(例項)裡,然而,這樣的變數要在不同圖書(例項)裡重複儲存,圖書(例項)數量少的話,我們還能接受,如果圖書(例項)數量較多的話,比如成千上萬,我們無法想象這要造成多少資源(如記憶體、磁碟空間)的浪費,更讓人無法忍受的是:因為圖書(例項)的數量要儲存在每本圖書(例項)裡,該值肯定是不同的。要使這些圖書(例項)中儲存的圖書(例項)數量一致,我們必須在每增加一本新書(生成乙個新例項)時,修改其他所有圖書(例項)中儲存的該值。oh,my god!你會重新嚮往面向過程的程式設計方法,嚮往擁有全域性變數的時代。但,這種局面不會出現,因為c#中為你準備好了另外一種變數型別:靜態變數。它在類中類似全域性變數,儲存類的公共資訊,所有該類的例項(物件)共享該值。
宣告靜態變數的語法如下:
《訪問修飾符》static 資料型別 變數名;
這裡的訪問修飾符跟類的其它成員一樣,可以是public,protected,private或internal等。
在普通的成員變數前加static關鍵字,就變成了靜態變數。靜態變數和例項變數儲存方式不同,靜態變數在宣告開始,就一直儲存在記憶體中,直到整個程式終止。而例項成員在建立物件時分配記憶體,並儲存乙個資料副本。所以靜態成員變數認為是屬於類的,而不是物件。
靜態變數與例項變數的區別如下:
1.記憶體分配
靜態變數在應用程式初始化時,就存在於記憶體當中,直到它所在的類的程式執行結束時才消亡;
而例項變數需要被例項化後才會分配記憶體。
2.生存週期
靜態變數生存週期為應用程式的存在週期;
例項變數的存在週期取決於例項化的類的存在週期。
3.呼叫方式
靜態變數只能通過「類.靜態變數名」呼叫,類的例項不能呼叫;
例項變數當該變數所在的類被例項化後,可通過例項化的類名直接訪問。
4.共享方式
靜態變數是全域性變數,被所有類的例項物件共享,即乙個例項的改變了靜態變數的值,其他同類的例項讀到的就是變化後的值;
例項變數是區域性變數,不共享的。
5.訪問方式
靜態成員不能訪問例項成員;
例項成員可以訪問靜態成員。
靜態變數在類裝載的時候分配記憶體,以後建立的物件都使用的該記憶體,相應的操作也就是對這塊記憶體進行操作。也可以看作是另類的全域性變數。
所以:靜態變數只的值只會初始化一次,後面每次訪問,都是上次處理過的值,(即使是在乙個函式內部)。 例項變數每次都初始化。
using system;
class program}
class sort}
靜態變數必須使用類名來引用,而不能使用類的例項,因為,靜態變數不屬於任何例項,而是共有的。我們可以打個比方:在乙個班級中,有些物品是個人的,我們想使用時,必須指出物品的所有者,比如說「王三的自行車」,在c#程式中我們可以使用:王三.自行車的格式。有些物品是大家共有的物品,不能以個人名義使用,而是用班級的名義使用,比如班集體出資買的籃球,只能說:「班級的籃球」,而不能說:「王三的籃球」。這絕對是不行的,這對其他人絕對是不公平的,我們可以聯想到許多**汙吏就是使用了不屬於自己的東西,或以個人名義使用公家的東西而葬送了自己。
說一句有用的就是:靜態變數是用類名來引用它。即:類名.靜態變數名;
舉個具體的例子如下:
using system;
using system.collections.generic;
using system.text;
class program
static void main(stringargs)
", class1.staticstr);
class1 tmpobj1 = new class1();
tmpobj1.notstaticstr = "tmpobj1";
class1 tmpobj2 = new class1();
tmpobj2.notstaticstr = "tmpobj2";
//非靜態變數通過物件進行訪問,不同物件的同一非靜態變數可以有不同的值
console.writeline("tmpobj1's notstaticstr: ", tmpobj1.notstaticstr);
console.writeline("tmpobj2's notstaticstr: ", tmpobj2.notstaticstr);
console.readline(); }
}
C 靜態變數
在c 程式中,沒有全域性變數的概念,這意味著所有的成員變數只有該類的實 例才能操作這些資料,這起到了 資訊隱藏 的作用。但有些時候,這樣做卻不是個明智的選擇。假設我們要定義乙個圖書類,要求該類能儲存圖書的數量,即每增加一本圖書 定義乙個例項 圖書的數量應該加1。如果沒有靜態變數,我們需要將圖書的數量...
C 靜態變數
在c 程式中,沒有全域性變數的概念,這意味著所有的成員變數只有該類的例項才能操作這些資料,這起到了 資訊隱藏 的作用。但有些時候,這樣做卻不是個明智的選擇。假設我們要定義乙個圖書類,要求該類能儲存圖書的數量,即每增加一本圖書 定義乙個例項 圖書的數量應該加1。如果沒有靜態變數,我們需要將圖書的數量儲...
C 靜態變數
靜態變數 型別說明符是static。靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區 在靜態儲存區內分配儲存單元 該區域中的資料在整個程式的執行期間一直占用這些儲存空間 在程式整個執行期間都不釋放 也可以認為是其記憶體位址不變,直到整個程式執行結束 相反,而auto自動變數,即動態區域性變...