靜態和非靜態

2021-06-29 03:49:07 字數 1279 閱讀 999

在自定義類和.net framework類庫中都可以發現,類中大部分是乙個類,很少是靜態類,那到底靜態類是否真的需要?

其實程式上的設計都是必須的,所有的設計都是**於生活,**於客戶分析。在程式設計初期,需要業務邏輯,明確編寫流程,以防後期各種修改。

比如設計個學校的管理軟體,記錄每個學生的資訊,包括班級、學校、成績、年齡。因為每個學生是不同的,可以為建立學生類,其中因為每個學生年齡、成績不同,所以這兩個特徵設為非靜態字段。但是很多學生的班級是一樣的,所以班級這個字段可以設為靜態的字段。至於靜態類,可以就是定義學校為靜態類,因為所有的學生的學校是相同的。

綜上所述,靜態還是很管用的,這麼做的目的其實很是節省資源。靜態類和靜態字段,在記憶體中只分配一次記憶體。非靜態的每次初始化,則要重新分配記憶體。

• 靜態類和非靜態類在定義是一樣的,就是在靜態類定義是前面新增static修飾符。

• 非靜態類中只能包含靜態成員、靜態函式。而非靜態類中可以包含靜態成員和非靜態成員。當然靜態方法中只能用靜態成員。

• 靜態類要記得不能例項化,其中成員訪問只能通多類來訪問。

• 在非靜態類中可以有靜態建構函式,用於初始化靜態成員。

• 靜態建構函式可以與的例項建構函式同時存在,且靜態建構函式只有乙個,例項建構函式可以過載多個。

• 靜態建構函式在clr載入類時執行,且只被執行一次,然而例項建構函式在每次例項建立時都會執行

• 靜態建構函式只能對靜態成員初始化,不能對非靜態成員進行初始化操作,然而例項建構函式,既可以初始化例項成員也可以初始化靜態成員,但靜態唯讀字段除外

• 類中包含靜態欄位和屬性時,字段一般設定為private,屬性設定為public,體現類的封裝性。例如:

private string name;

public string name }

• 訪問性:靜態中欄位、屬性、方法只能通過類中訪問,非靜態中則通過例項來訪問。

• 記憶體分配:記憶體中靜態的成員只分配乙份,而例項化物件每次例項化時都要分配一塊記憶體區域。

• 方法內部訪問:靜態方法只能訪問靜態成員和方法,也可通過例項物件間接訪問例項字段、方法。

• 方法呼叫:在類中記憶體訪問時,靜態不能通過this,這個類似例項指標。

• 派生性:

• 靜態方法不能被標識為virtual、abstract或override,靜態方法可以被派生訪問,但是不能被派生類重寫

三、總結

在程式設計中一定要善於應用靜態變數和靜態類,靜態變數和靜態類從流程圖可以得到其存存活時間是比例項長,可以有效的節省記憶體,其實靜態型別在一定程度上get應用較多,set較少。

靜態和非靜態

靜態包括靜態類 靜態方法和靜態變數。靜態都是全域性擁有的,比如,靜態變數是這個類的所有例項共有 乙個例項的修改影響其他例項。靜態類中只能包含靜態變數和靜態方法。非靜態類既可以包含靜態變數和方法,又可以包含非靜態變數和方法。靜態類不能夠被例項化,直接使用類名呼叫變數或方法。非靜態變數同樣可以使用類名呼...

靜態和非靜態方法 呼叫靜態和非靜態方法 原創

在學習php物件導向的時候,遇到了一些問題 class test1 在test1類中,定義了乙個test方法。一般呢,想要呼叫test方法的話,是通過例項化乙個物件來呼叫test方法的。比如 aaa.php php 正常的方式訪問普通方法test class test1 new new test1 ...

靜態和非靜態方法 呼叫靜態和非靜態方法 原創

在學習php物件導向的時候,遇到了一些問題 class test1 在test1類中,定義了乙個test方法。一般呢,想要呼叫test方法的話,是通過例項化乙個物件來呼叫test方法的。比如 aaa.php php 正常的方式訪問普通方法test class test1 new new test1 ...