C# 静态构造函数
(1)用于對靜態(tài)字段、只讀字段等的初始化?! ?
(2)添加static關(guān)鍵字,不能添加訪問修飾符,因為靜態(tài)構(gòu)造函數(shù)都是私有的?! ?
(3)類的靜態(tài)構(gòu)造函數(shù)在給定應(yīng)用程序域中至多執(zhí)行一次:只有創(chuàng)建類的實例或者引用類的任何靜態(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è)定項的靜態(tài)字段,則在執(zhí)行該類的靜態(tài)構(gòu)造函數(shù)時,先要按照文本順序執(zhí)行那些初始值設(shè)定項?!?
(6)如果沒有編寫靜態(tài)構(gòu)造函數(shù),而這時類中包含帶有初始值設(shè)定的靜態(tài)字段,那么編譯器會自動生成默認的靜態(tài)構(gòu)造函數(shù)。
以下用例子代碼進一步說明:
/**************************************************
?*????????????靜?態(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è)定項的靜態(tài)字段,
??????????????//???執(zhí)行該類的靜態(tài)構(gòu)造函數(shù)時,
??????????????//???先要按照文本順序執(zhí)行那些初始值設(shè)定項。
??????????????//???轉(zhuǎn)到初始值設(shè)定項---->
?{
??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();
?}
}??
(2)添加static關(guān)鍵字,不能添加訪問修飾符,因為靜態(tài)構(gòu)造函數(shù)都是私有的?! ?
(3)類的靜態(tài)構(gòu)造函數(shù)在給定應(yīng)用程序域中至多執(zhí)行一次:只有創(chuàng)建類的實例或者引用類的任何靜態(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è)定項的靜態(tài)字段,則在執(zhí)行該類的靜態(tài)構(gòu)造函數(shù)時,先要按照文本順序執(zhí)行那些初始值設(shè)定項?!?
(6)如果沒有編寫靜態(tài)構(gòu)造函數(shù),而這時類中包含帶有初始值設(shè)定的靜態(tài)字段,那么編譯器會自動生成默認的靜態(tài)構(gòu)造函數(shù)。
以下用例子代碼進一步說明:
/**************************************************
?*????????????靜?態(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è)定項的靜態(tài)字段,
??????????????//???執(zhí)行該類的靜態(tài)構(gòu)造函數(shù)時,
??????????????//???先要按照文本順序執(zhí)行那些初始值設(shè)定項。
??????????????//???轉(zhuǎn)到初始值設(shè)定項---->
?{
??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();
?}
}??
總結(jié)
- 上一篇: 简单分页
- 下一篇: 在 C# 中通过 P/Invoke 调用