資料成員:
資料成員可以分靜態變數、執行個體變數兩種.
靜態成員:靜態成員變數是和類相關聯的,可以作為類中"共"有的變數(是一個共性的表現),他不依賴特定對象的存在,訪問的時候通過類名加點操作符加變數名來訪問.
執行個體成員:執行個體成員變數是和對象相關聯的,訪問執行個體成員變數依賴於執行個體的存在.
函數成員:
方法可以主要分為靜態方法,執行個體方法
靜態方法:靜態方法是不屬於特定對象的方法,靜態方法可以訪問靜態成員變數,靜態方法不可以直接存取執行個體變數,可以在執行個體函數調用的情況下,執行個體變數做為參數傳給靜態方法。靜態方法也不能直接調用執行個體方法,可以間接調用,首先要建立一個類的執行個體,然後通過這一特定對象來調用靜態方法。
執行個體方法:一個執行個體方法的執行與特定對象關聯,他的執行需要一個對象存在。執行個體方法可以直接存取靜態變數和執行個體變數,執行個體方法可以直接存取執行個體方法、和靜態方法,靜態方法的訪問方式為類名加點操作符加變數名。當多個執行個體對象存在時,記憶體中並不是存在美個特定的執行個體方法的拷貝,而是,相同類的所有對象都共用每個執行個體方法的一個拷貝(執行個體方法只佔用“一套”空間)。
如果將類中的某個成員聲明為static,則稱該成員為靜態成員。一般來說,靜態成員是屬於類所有的,而非靜態成員則屬於類的執行個體的。每建立一個類的執行個體,都在記憶體中為非靜態成員開闢一片地區。而類的靜態成員為類所有,為這個類的所有執行個體共用。無論這個類建立了多少副本,一個靜態成員在記憶體中只佔有一塊地區。
C#類中靜態成員變數的生命週期問題,就是什麼時候建立,什麼時候銷毀已聲明元素的“生存期”是元素可供使用的時間周期。變數是唯一具有生存期的元素;為此,編譯器將過程參數和函數傳回值視為變數的特殊情況。變數的生存期表示它可以保留值的時間周期。在生存期內變數的值可以更改,但變數總是保留某些值。
不同的生存期
在模組層級聲明的變數通常在應用程式的整個運行期間都存在。在類或結構中聲明的非共用變數作為聲明它的類或結構的每個執行個體的單獨副本存在;每個這樣的變數都具有與它的執行個體相同的生存期。但是,Shared 變數僅有一個生存期,即應用程式運行所持續的全部時間。
用 Dim 聲明的局部變數僅當聲明它們的過程正在執行時存在。這同樣適用於過程的參數和任何函數傳回值。但是,如果該程序呼叫其他過程,則局部變數在被調用過程運行期間保留它們的值。
生存期的開始
當執行到聲明局部變數的過程時,局部變數的生存期開始。過程一開始執行,每個局部變數即被初始化為其資料類型的預設值。數字變數(包括 Byte 和 Char)被初始化為 0,Date 變數初始化為公元 1 年的 1 月 1 日零時,Boolean 變數初始化為 False,參考型別變數(包括字串、數組和 Object)初始化為 Nothing。
結構變數的每個成員被視為單獨的變數初始化。同樣,陣列變數的每個元素也單獨初始化。
如果變數是用初始值設定項聲明的,則在執行變數的聲明語句時,將給該變數分配指定的值,如下面的樣本所示:
Dim X As Double = 18.973 ' X had previously been initialized to 0.
在過程的內部塊中聲明的變數在進入該過程時初始化為其預設值。不論該塊是否曾執行過,這些初始化都會生效。
生存期的結束
當過程終止時,不再保留該過程的局部變數值,並回收局部元素所使用的記憶體。下次執行該過程時,將重新建立它的所有局部元素並初始化局部變數。
當類或結構的執行個體終止時,它的非共用變數丟失它們的值。類或結構的每個新執行個體都建立它的所有非共用元素並初始化非共用變數。Shared 元素被一直保留到應用程式停止運行時。
生存期的擴充
如果局部變數是用 Static 關鍵字聲明的,則它的生存期比聲明它的過程的執行時間長。如果該過程在某模組內,則只要應用程式繼續運行,static 變數就一直存在。
如果 static 變數是在類的內部過程中聲明的,則該變數的生存期取決於此過程是否共用。如果此過程已用 Shared 關鍵字聲明,則變數的生存期將一直延續到應用程式終止時為止。如果此過程為非共用,則其 static 變數為類的執行個體成員,並且其生存期與類執行個體的生存期相同。
在下面的樣本中,RunningTotal 函數通過將新值添加到儲存在靜態變數 ApplesSold 中的以前值的合計來計算流量合計:
Function RunningTotal(ByVal Num As Integer) As Integer
Static ApplesSold As Integer
ApplesSold = ApplesSold + Num
Return ApplesSold ' ApplesSold keeps its current value.
End Function
如果沒有使用 Static 就已聲明了 ApplesSold,則在函數調用期間將不保留以前累計的值,並且函數只返回上次用來調用它的相同值。
在模組層級聲明 ApplesSold 可產生相同的生存期。但是,如果這樣更改變數的範圍,此過程將不再擁有對該變數的獨佔訪問權。由於其他過程可以訪問該變數並更改它的值,因此流量合計是不可靠的,並且代碼可能會更難維護。
靜態成員在第一次被訪問之前並且在任何靜態建構函式(如調用的話)之前初始化。若要訪問靜態類成員,應使用類名而不是變數名來指定該成員的位置。