C 基礎知識系列 全面解析C 中靜態與非靜態

2021-09-21 09:02:08 字數 1500 閱讀 2998

在c#中,靜態和非靜態的特徵對於我們來說是再熟悉不過了,但是很少看到有一篇文章去好好地總結靜態和非靜態它們之間的不同,為了幫助大家更好地去理解靜態和非靜態特徵, 所以將在這篇文章中幫大家全面總結下它們之間的不同,包括靜態類,靜態成員和靜態建構函式。希望在大家鞏固基礎的時候可以拿出來好好複習下的。下面廢話不多了,直接進入我們今天的主題。

在自定義類或看.net framework類庫中都可以發現,類中大部分都是具體例項特徵(也就是沒有static標識的),同時我們也能看到一些具有靜態特徵的類或成員,例如我們經常使用的console類以及writeline方法就是靜態的。然而有些朋友會疑惑,為什麼還要有靜態特徵的呢?乾脆都定義為例項的好了? 然後靜態特徵的存在肯定有它存在的原因的,並不是我們就是要這麼定義的,其實我一直認為不管是什麼都是源於生活的, 技術的實現也是一樣,比如我們開發程式,需要掌握技術外,其實更重要的是業務邏輯這塊的,如果你都不知道你開發的東西是怎樣的乙個流程,即使你技術再牛做出來的東西都是***的東西(也就是指不符合使用者的使用者習慣和之前的乙個業務需求),其實靜態特徵的存在也是源於生活的,對於類好比就是我們現實生活中的人或事物,靜態特徵和非靜態特徵就好比生活中人或事物具有的特徵, 我們詢問人的時候或者電視劇集警察查案件的時候,都會聽到這樣一句話 "那個人有什麼特徵?"或 「嫌疑犯有什麼特徵?多高,年齡等」 其實高度、年齡、性別都是乙個人的特徵,所以這些在語言範疇就需要為其進行定義了,也就是我們定義的例項成員了,然而有些特徵需要被所有物件例項所共有的,這些特徵在語言範疇就定義為靜態特徵,具體哪些特徵可以定義為靜態特徵呢? 其實這點一樣是源於生活的,所以我們在開發軟體的過程中,必不可少的乙個流程就是需求分析了,只有在了解客戶需求的條件下才能進行之後的所有流程的, 例如乙個班級有很多學生,每個學生是乙個實體,在語言範疇就可以定義乙個類,當我們需要乙個學生的時候就可以通過new 關鍵字建立乙個出來(說到這裡又讓我想到了惡搞泰囧的——你有物件嗎?沒物件,你們程式設計師可以自己new乙個啊?),然而我們建立出來的學生他們都有一些共有的特徵,如同乙個班級,學校等, 如果我們把班級、學校這樣的特徵也定義為例項的話,那麼我們不是每次建立物件例項的時候都為這些共有的特徵分配一次記憶體的,這樣不僅對記憶體空間的浪費也是不滿足生活常識的,此時我們就可以把班級、學校這樣的特徵定義為靜態特徵,這樣所有例項都可以共享這兩個特徵,並且不需要為每個物件例項分配記憶體

public

static

class

staticclass    

上面**用il反匯程式設計序得到的il**結構為:

靜態欄位的初始值在靜態構造函式呼叫之前被指定,建構函式的執行順序大致如下圖所示:

下面就直接總結下它們之間的區別:

類似於靜態欄位和屬性,靜態方法共享**段,同樣以static關鍵字來標識靜態方法,對於他們之間的區別總結為:

C 基礎知識系列 全面解析C 中靜態與非靜態

在c 中,靜態和非靜態的特徵對於我們來說是再熟悉不過了,但是很少看到有一篇文章去好好地總結靜態和非靜態它們之間的不同,為了幫助大家更好地去理解靜態和非靜態特徵,所以將在這篇文章中幫大家全面總結下它們之間的不同,包括靜態類,靜態成員和靜態建構函式。希望在大家鞏固基礎的時候可以拿出來好好複習下的。下面廢...

C 中基礎知識

1 讀入未知數目的輸入 不知道具體有多少數值,只是要一直讀數直到程式輸入結束。使用的程式有 while std cin value sum value 2 寫有引數的函式時,首要工作,就是要對傳進來的所有引數進行合法性檢查。而對於傳出的引數也應該進行檢查,這個動作當然應該在函式的外部,也就是說,呼叫...

C 基礎知識 C 中引用的知識點解析

建立引用的作用通常是為變數起另乙個名字,變數的引用通常被認為是變數的別名。在宣告乙個引用時,必須用另乙個變數來將其初始化。例如 int i 5 int j i 宣告j是乙個整型變數變數的引用,並用i將其初始化。此處j可以看作是變數i的乙個別名,經過這樣的宣告後i和j的作用相同,代表同乙個變數。對其進...