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、每個類都必須有構造函數,否則此類無法實例化成對象。而我們有時定義的類可以不寫它的構造函數,這是因爲編譯器會幫我們加上一個靜態的空構造函數。這樣才能實例化。也可以用靜態構造函數去初始化靜態變量。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章