C#中靜態(tài)構(gòu)造函數(shù)的學(xué)習(xí)
2024-07-21 02:17:36
供稿:網(wǎng)友
(1)用于對(duì)靜態(tài)字段、只讀字段等的初始化。
(2)添加static關(guān)鍵字,不能添加訪問修飾符,因?yàn)殪o態(tài)構(gòu)造函數(shù)都是私有的。
(3)類的靜態(tài)構(gòu)造函數(shù)在給定應(yīng)用程序域中至多執(zhí)行一次:只有創(chuàng)建類的實(shí)例或者引用類的任何靜態(tài)成員才激發(fā)靜態(tài)構(gòu)造函數(shù)
(4)靜態(tài)構(gòu)造函數(shù)是不可繼承的,而且不能被直接調(diào)用。
(5)如果類中包含用來開始執(zhí)行的 main 方法,則該類的靜態(tài)構(gòu)造函數(shù)將在調(diào)用 main 方法之前執(zhí)行。
任何帶有初始值設(shè)定項(xiàng)的靜態(tài)字段,則在執(zhí)行該類的靜態(tài)構(gòu)造函數(shù)時(shí),先要按照文本順序執(zhí)行那些初始值設(shè)定項(xiàng)。
(6)如果沒有編寫靜態(tài)構(gòu)造函數(shù),而這時(shí)類中包含帶有初始值設(shè)定的靜態(tài)字段,那么編譯器會(huì)自動(dòng)生成默認(rèn)的靜態(tài)構(gòu)造函數(shù)。
以下用例子代碼進(jìn)一步說明:
/**************************************************
* 靜 態(tài) 構(gòu) 造 函 數(shù) 練 習(xí)
* (1)①②③……為執(zhí)行順序
* (2)輸出結(jié)果: static a()
* static b()
* x = 1, y = 2
***************************************************/
using system;
class a
{
public static int x;
static a() //④ 執(zhí)行完后返回到③
{
x = b.y + 1;
console.writeline("static a()");
}
}
class b
{
public static int y = a.x + 1; //③ 調(diào)用了a的靜態(tài)成員,
// 轉(zhuǎn)到a的靜態(tài)構(gòu)造函數(shù)---->
static b() //② 如果帶有初始值設(shè)定項(xiàng)的靜態(tài)字段,
// 執(zhí)行該類的靜態(tài)構(gòu)造函數(shù)時(shí),
// 先要按照文本順序執(zhí)行那些初始值設(shè)定項(xiàng)。
// 轉(zhuǎn)到初始值設(shè)定項(xiàng)---->
{
console.writeline("static b()");
}
static void main() //① 程序入口,
// 如果類中包含用來開始執(zhí)行的 main 方法,
// 該類的靜態(tài)構(gòu)造函數(shù)將在調(diào)用 main 方法之前執(zhí)行。
// 轉(zhuǎn)到b的靜態(tài)構(gòu)造函數(shù)---->
{
console.writeline("x = {0}, y = {1}", a.x, b.y);//⑤ 輸出結(jié)果
console.readline();
}
}