1. 程式人生 > >static與C#中的static

static與C#中的static

Static

1、靜態方法與非靜態方法

a、靜態方法的呼叫
類.靜態方法名([引數列表])

非靜態方法的呼叫
類 物件 = new 類的建構函式([引數列表])
物件.非靜態方法名([引數列表])

靜態方法是屬於類的,而非靜態方法是屬於物件的;

b、記憶體的初始化
靜態成員是在第一次使用時進行初始化。非靜態的成員是在建立物件的時候。
靜態建構函式只能被執行一次;非靜態的建構函式可以根據需要進行多次使用。

c、記憶體中儲存
靜態的只有一塊全域性記憶體空間,非靜態的可以有多塊記憶體空間(副本)

d、釋放
靜態的一旦建立則在全域性區一直存放,直到應用程式結束。非靜態的則是由new關鍵字在堆中建立的。可以有多個副本。由GC進行釋放。

2、都有哪些靜態的東西

方法、欄位、屬性、事件、建構函式、類

不能使用靜態關鍵字的
常量、索引器、解構函式

3、靜態建構函式
非靜態類中可以包含靜態成員。但是,靜態類中不能包含任何非靜態成員
靜態建構函式不能帶有任何引數,而非靜態建構函式可以有多種引數列表

4、使用場合
a、需要儲存全域性都有效的資料, 如:當前已登入使用者資訊、系統配置資訊、系統設定
b、因為效率相對更高,所以需要快速訪問的
c、使用頻率非常高的

注意:不要過多的濫用Static

C#Static

有時候寫程式時常常遇到這樣的情況: 1、定義了變數和方法不知道什麼時候該加上static修飾符。 2、static變數和方法與非static變數和方法有什麼區別? 3、在一個類的靜態方法裡為什麼不能訪問該類的非靜態成員變數和方法? 4、在一個類的非靜態方法中為什麼可以訪問該類的靜態變數和方法? 5、在靜態方法中為什麼不能用this? 6、靜態建構函式有什麼作用? 基於以上問題,我發表自己的看法如下: 1、static變數及方法不用例項化物件就可以用類名.靜態變數和類名.靜態方法這種方式進行訪問,這使得訪問更加方便,不用手工例項化物件。對於某些只讀變數和方法來說很適合共享。 2、static與非static最大的區別就是static型別的變數及方法在呼叫的時候就在記憶體中分配了地址,且這個地址只有一份,故static可以直接訪問。而非static必需手工去例項化該類,以物件的方式去訪問變數和方法。 3、在一個靜態方法裡去訪問該類的非靜態變數或方法,由於static是屬於類本身的,是在類被呼叫的時候,static型別就已經生成,而非static此時並沒有生成,它不屬於這個類本身,它是屬於這個類的物件。故在沒有例項化成物件的時候,在靜態方法中訪問非靜態是根本找不到它們的,它不屬於這個類。 4、在非靜態方法中去訪問靜態,由於類被呼叫時,靜態變數和方法就已經生成,也就是說它們屬於這個類。既然已經存在,故不管是在靜態方法中,還是非靜態方法中都可以訪問到它們。 5、this表明物件本身,而在靜態方法中並沒有物件概念存在,它只有類本身這個概念,它和物件是屬於兩種互拆的狀態,即我中無你,你中無我的情況。也就是說你用物件名.靜態變數或物件名.靜態方法是不可訪問的。 6、每個類都必須有建構函式,否則此類無法例項化成物件。而我們有時定義的類可以不寫它的建構函式,這是因為編譯器會幫我們加上一個靜態的空建構函式。這樣才能例項化。也可以用靜態建構函式去初始化靜態變數。