C 靜態建構函式複習

2021-09-12 07:27:15 字數 1871 閱讀 8373

開始複習起來c#基礎知識了!

c#普通的建構函式大家應該都是相當了解的了,那麼在靜態建構函式中只需將函式宣告關鍵字使用static即可,通常靜態建構函式初始化類的靜態字段。

來看看常見的問題

q:靜態建構函式與例項建構函式相同點?

a:1.靜態建構函式的名稱必須與類名相同。

2.建構函式不能返回值

q:靜態建構函式與例項建構函式不同點?

a:1.靜態建構函式宣告中使用static關鍵字

2.類只能有乙個靜態建構函式,並且不能帶引數

3.靜態建構函式不能有訪問修飾符

q:類中可以既有靜態建構函式和例項建構函式麼?

a:當然!

q:靜態建構函式可以訪問所在類的例項成員麼?

a:只能訪問靜態成員,因此也不能使用this訪問器

q:靜態建構函式可以多次呼叫麼?

a:最多呼叫一次

q:靜態建構函式可以被繼承麼?

a:當然…不可以!

q:靜態建構函式是如何呼叫的呢?

a:我們在程式中不能顯式呼叫靜態建構函式,系統會自動呼叫它們。

q:那系統會在什麼時候呼叫呢?

a:1.類的任何例項被建立之前

2.類的任何靜態成員被引用之前

接下來直接看兩段**了解一下具體

class program

}public class a

public a()

}public class b : a

public b()

}

根據上面的常見問題解答 對於理解靜態建構函式就方便多了。

我們首先要訪問類a的靜態成員strtext,所以呼叫了類a的靜態建構函式,給strtext賦值為aaa,所以第一行就是aaa。接著看類b,由於b繼承了a,所以呼叫a的靜態建構函式,但是之前a已經呼叫過了,所以不再使用,而strtext是a類的靜態成員,所以b的靜態建構函式不會呼叫,所以最終也是輸出aaa

繼續變形一下!

class program

}public class a

public a()

}public class b : a

public b()

}

這次我們是將a b兩個類例項化了物件,依次來分析一下

首先例項化了b的物件,所以我們要從b中呼叫靜態建構函式,但是由於b繼承自a類,所以先呼叫a類的靜態建構函式,strtext為aaa,呼叫完a類後再呼叫b類自身的靜態建構函式,所以strtext修改為bbb。接著我們再看a例項化了物件,要呼叫自身的靜態建構函式,但是之前被b呼叫掉了(只能被呼叫一次)所以無法呼叫自身的靜態建構函式了。所以很明顯最後輸出的是兩行bbb

那肯定有人要問了,是不是因為你在**裡先例項化了b再例項化了a才這樣的,當然可以做個嘗試,改變一下順序,先例項化a再例項化b也是同樣的結果啦。分析一下:如果先例項化a,呼叫自身a的靜態建構函式,將strtext=aaa,然後例項化b,b繼承自a,所以先呼叫a的靜態建構函式,但是已經被a之前呼叫過了所以無法呼叫,接著再呼叫自身b的靜態建構函式將strtext==bbb。所以結果顯而易見還是兩行bbb

靜態建構函式就複習到這了,如果有遺漏的或者有出錯的麻煩指出,謝謝!

C 靜態建構函式

c 靜態建構函式 靜態建構函式是 c 的乙個新特性,在程式設計過程中用處並不廣,它的主要目的是用於初始化一些靜態的變數。因為這個建構函式是屬於類的,而不屬於任何乙個例項,所以這個建構函式只會被執行一次,而且是在建立此類的第乙個例項或引用任何靜態成員之前,由 net 自動呼叫。在程式中我們可以這樣寫 ...

c 靜態建構函式

c 靜態建構函式,又稱類建構函式。它是屬於類的,不屬於任何乙個類的例項。它具有以下特點 1 以static定義的,無訪問修飾符,無返回型別,無引數的建構函式,如 code class test 2 不能通過 顯式的呼叫靜態建構函式 3 靜態建構函式在類的靜態成員第一次訪問或第乙個類例項建立之前由系統...

C 靜態建構函式

c 靜態建構函式 duduhe譯 簡介 net c 提供靜態建構函式功能,用以初始化靜態資料及執行某項特殊操作,該操作可能僅需執行一次。靜態建構函式用如下格式來宣告 static classname 以下任意情況發生時,靜態建構函式自動呼叫 l類例項的建立。l類的任意乙個靜態成員 屬性或方法 被呼叫...