C# 静态构造函数
(1)用于對靜態字段、只讀字段等的初始化。
(2)添加static關鍵字,不能添加訪問修飾符,因為靜態構造函數都是私有的。
(3)類的靜態構造函數在給定應用程序域中至多執行一次:只有創建類的實例或者引用類的任何靜態成員才激發靜態構造函數
(4)靜態構造函數是不可繼承的,而且不能被直接調用。
(5)如果類中包含用來開始執行的?Main?方法,則該類的靜態構造函數將在調用?Main?方法之前執行。
????任何帶有初始值設定項的靜態字段,則在執行該類的靜態構造函數時,先要按照文本順序執行那些初始值設定項。
(6)如果沒有編寫靜態構造函數,而這時類中包含帶有初始值設定的靜態字段,那么編譯器會自動生成默認的靜態構造函數。
以下用例子代碼進一步說明:
/**************************************************
?*????????????靜?態?構?造?函?數?練?習
?*?(1)①②③……為執行順序
?*?(2)輸出結果:?static?A()
?*?????????????????static?B()
?*?????????????????X?=?1,?Y?=?2
?***************************************************/
using?System;
class?A
{
?public?static?int?X;
?static?A()???????????//④?執行完后返回到③
?{
??X?=?B.Y?+?1;
??Console.WriteLine("static?A()");
?}
}
class?B
{
?public?static?int?Y?=?A.X?+?1;??????//③?調用了A的靜態成員,
?????????????????????????????????????????????????????//???轉到A的靜態構造函數---->
?static?B()???????????//②?如果帶有初始值設定項的靜態字段,
??????????????//???執行該類的靜態構造函數時,
??????????????//???先要按照文本順序執行那些初始值設定項。
??????????????//???轉到初始值設定項---->
?{
??Console.WriteLine("static?B()");
?}
?static?void?Main()?????????//①?程序入口,
??????????????//???如果類中包含用來開始執行的?Main?方法,
??????????????//???該類的靜態構造函數將在調用?Main?方法之前執行。
??????????????//???轉到B的靜態構造函數---->
?{
??Console.WriteLine("X?=?{0},?Y?=?{1}",?A.X,?B.Y);//⑤?輸出結果
??Console.ReadLine();
?}
}??
(2)添加static關鍵字,不能添加訪問修飾符,因為靜態構造函數都是私有的。
(3)類的靜態構造函數在給定應用程序域中至多執行一次:只有創建類的實例或者引用類的任何靜態成員才激發靜態構造函數
(4)靜態構造函數是不可繼承的,而且不能被直接調用。
(5)如果類中包含用來開始執行的?Main?方法,則該類的靜態構造函數將在調用?Main?方法之前執行。
????任何帶有初始值設定項的靜態字段,則在執行該類的靜態構造函數時,先要按照文本順序執行那些初始值設定項。
(6)如果沒有編寫靜態構造函數,而這時類中包含帶有初始值設定的靜態字段,那么編譯器會自動生成默認的靜態構造函數。
以下用例子代碼進一步說明:
/**************************************************
?*????????????靜?態?構?造?函?數?練?習
?*?(1)①②③……為執行順序
?*?(2)輸出結果:?static?A()
?*?????????????????static?B()
?*?????????????????X?=?1,?Y?=?2
?***************************************************/
using?System;
class?A
{
?public?static?int?X;
?static?A()???????????//④?執行完后返回到③
?{
??X?=?B.Y?+?1;
??Console.WriteLine("static?A()");
?}
}
class?B
{
?public?static?int?Y?=?A.X?+?1;??????//③?調用了A的靜態成員,
?????????????????????????????????????????????????????//???轉到A的靜態構造函數---->
?static?B()???????????//②?如果帶有初始值設定項的靜態字段,
??????????????//???執行該類的靜態構造函數時,
??????????????//???先要按照文本順序執行那些初始值設定項。
??????????????//???轉到初始值設定項---->
?{
??Console.WriteLine("static?B()");
?}
?static?void?Main()?????????//①?程序入口,
??????????????//???如果類中包含用來開始執行的?Main?方法,
??????????????//???該類的靜態構造函數將在調用?Main?方法之前執行。
??????????????//???轉到B的靜態構造函數---->
?{
??Console.WriteLine("X?=?{0},?Y?=?{1}",?A.X,?B.Y);//⑤?輸出結果
??Console.ReadLine();
?}
}??
總結
- 上一篇: 简单分页
- 下一篇: 康佳电视42寸换屏多少钱?