學(xué)習(xí)C#靜態(tài)函數(shù)及變量的一個(gè)精典例子與代碼
更新時(shí)間:2007年03月25日 00:00:00 作者:
(1)用于對(duì)靜態(tài)字段、只讀字段等的初始化。
?。?)添加static關(guān)鍵字,不能添加訪問(wèn)修飾符,因?yàn)殪o態(tài)構(gòu)造函數(shù)都是私有的。
?。?)類(lèi)的靜態(tài)構(gòu)造函數(shù)在給定應(yīng)用程序域中至多執(zhí)行一次:只有創(chuàng)建類(lèi)的實(shí)例或者引用類(lèi)的任何靜態(tài)成員才激發(fā)靜態(tài)構(gòu)造函數(shù)
(4)靜態(tài)構(gòu)造函數(shù)是不可繼承的,而且不能被直接調(diào)用。
?。?)如果類(lèi)中包含用來(lái)開(kāi)始執(zhí)行的 Main 方法,則該類(lèi)的靜態(tài)構(gòu)造函數(shù)將在調(diào)用 Main 方法之前執(zhí)行。任何帶有初始值設(shè)定項(xiàng)的靜態(tài)字段,則在執(zhí)行該類(lèi)的靜態(tài)構(gòu)造函數(shù)時(shí),先要按照文本順序執(zhí)行那些初始值設(shè)定項(xiàng)。
?。?)如果沒(méi)有編寫(xiě)靜態(tài)構(gòu)造函數(shù),而這時(shí)類(lèi)中包含帶有初始值設(shè)定的靜態(tài)字段,那么編譯器會(huì)自動(dòng)生成默認(rèn)的靜態(tài)構(gòu)造函數(shù)。
以下用例子代碼進(jìn)一步說(shuō)明:
/**************************************************
* 靜 態(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í)行該類(lèi)的靜態(tài)構(gòu)造函數(shù)時(shí),
// 先要按照文本順序執(zhí)行那些初始值設(shè)定項(xiàng)。
// 轉(zhuǎn)到初始值設(shè)定項(xiàng)---->
{
Console.WriteLine("static B()");
}
static void Main() //① 程序入口,
// 如果類(lèi)中包含用來(lái)開(kāi)始執(zhí)行的 Main 方法,
// 該類(lèi)的靜態(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();
}
}
?。?)添加static關(guān)鍵字,不能添加訪問(wèn)修飾符,因?yàn)殪o態(tài)構(gòu)造函數(shù)都是私有的。
?。?)類(lèi)的靜態(tài)構(gòu)造函數(shù)在給定應(yīng)用程序域中至多執(zhí)行一次:只有創(chuàng)建類(lèi)的實(shí)例或者引用類(lèi)的任何靜態(tài)成員才激發(fā)靜態(tài)構(gòu)造函數(shù)
(4)靜態(tài)構(gòu)造函數(shù)是不可繼承的,而且不能被直接調(diào)用。
?。?)如果類(lèi)中包含用來(lái)開(kāi)始執(zhí)行的 Main 方法,則該類(lèi)的靜態(tài)構(gòu)造函數(shù)將在調(diào)用 Main 方法之前執(zhí)行。任何帶有初始值設(shè)定項(xiàng)的靜態(tài)字段,則在執(zhí)行該類(lèi)的靜態(tài)構(gòu)造函數(shù)時(shí),先要按照文本順序執(zhí)行那些初始值設(shè)定項(xiàng)。
?。?)如果沒(méi)有編寫(xiě)靜態(tài)構(gòu)造函數(shù),而這時(shí)類(lèi)中包含帶有初始值設(shè)定的靜態(tài)字段,那么編譯器會(huì)自動(dòng)生成默認(rèn)的靜態(tài)構(gòu)造函數(shù)。
以下用例子代碼進(jìn)一步說(shuō)明:
復(fù)制代碼 代碼如下:
/**************************************************
* 靜 態(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í)行該類(lèi)的靜態(tài)構(gòu)造函數(shù)時(shí),
// 先要按照文本順序執(zhí)行那些初始值設(shè)定項(xiàng)。
// 轉(zhuǎn)到初始值設(shè)定項(xiàng)---->
{
Console.WriteLine("static B()");
}
static void Main() //① 程序入口,
// 如果類(lèi)中包含用來(lái)開(kāi)始執(zhí)行的 Main 方法,
// 該類(lèi)的靜態(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();
}
}
相關(guān)文章
C#實(shí)現(xiàn)簡(jiǎn)單的汽車(chē)租賃系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)汽車(chē)租賃系統(tǒng)的具體實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
WPF仿三星手機(jī)充電界面實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了WPF仿三星手機(jī)充電界面實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
利用C#/VB.NET實(shí)現(xiàn)PPT轉(zhuǎn)換為HTML
利用PowerPoint可以很方便的呈現(xiàn)多媒體信息,且信息形式多媒體化,表現(xiàn)力強(qiáng)。但難免在某些情況下我們會(huì)需要將PowerPoint轉(zhuǎn)換為HTML格式,本文就為大家整理了轉(zhuǎn)換方法,希望對(duì)大家有所幫助2023-05-05
C#實(shí)現(xiàn)最完整的文件和目錄操作類(lèi)實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)最完整的文件和目錄操作類(lèi),涉及C#針對(duì)文件與目錄的創(chuàng)建、獲取、檢測(cè)、刪除等常用操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05
C#使用ICSharpCode.SharpZipLib.dll進(jìn)行文件的壓縮與解壓功能
這篇文章主要介紹了C#使用ICSharpCode.SharpZipLib.dll進(jìn)行文件的壓縮與解壓功能,需要的朋友可以參考下2017-12-12
C# winfrom異步加載數(shù)據(jù)不影響窗體UI的操作方法
這篇文章主要介紹了C# winfrom 異步加載數(shù)據(jù)不影響窗體UI,在 WinForms 應(yīng)用程序中,如果數(shù)據(jù)加載是一個(gè)比較耗時(shí)的操作,直接在主線程中進(jìn)行加載會(huì)導(dǎo)致 UI 凍結(jié),這是因?yàn)?nbsp;WinForms 的 UI 是單線程的,主線程被阻塞時(shí)就無(wú)法處理其他 UI 相關(guān)的任務(wù)2024-12-12
C# NAudio 庫(kù)的各種常見(jiàn)使用方式之播放 錄制 轉(zhuǎn)碼 音頻可視化
這篇文章主要介紹了C# NAudio 庫(kù)的各種常見(jiàn)使用方式之播放 錄制 轉(zhuǎn)碼 音頻可視化,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05
C#使用Data?Annotations進(jìn)行手動(dòng)數(shù)據(jù)驗(yàn)證
這篇文章介紹了C#使用Data?Annotations進(jìn)行手動(dòng)數(shù)據(jù)驗(yàn)證的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06

