學(xué)習(xí)C#靜態(tài)函數(shù)及變量的一個(gè)精典例子與代碼
更新時(shí)間:2007年03月25日 00:00:00 作者:
(1)用于對(duì)靜態(tài)字段、只讀字段等的初始化。
(2)添加static關(guān)鍵字,不能添加訪問修飾符,因?yàn)殪o態(tài)構(gòu)造函數(shù)都是私有的。
?。?)類的靜態(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)用。
?。?)如果類中包含用來開始執(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();
}
}
(2)添加static關(guān)鍵字,不能添加訪問修飾符,因?yàn)殪o態(tài)構(gòu)造函數(shù)都是私有的。
?。?)類的靜態(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)用。
?。?)如果類中包含用來開始執(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)一步說明:
復(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í)行該類的靜態(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();
}
}
相關(guān)文章
C#實(shí)現(xiàn)套接字發(fā)送接收數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)套接字發(fā)送接收數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11c#使用windows服務(wù)更新站點(diǎn)地圖的詳細(xì)示例
這篇文章主要介紹了c#使用windows服務(wù)更新站點(diǎn)地圖的詳細(xì)示例,需要的朋友可以參考下2014-04-04winform 使用Anchor屬性進(jìn)行界面布局的方法詳解
這篇文章主要介紹了winform 使用Anchor屬性進(jìn)行界面布局的方法,有需要的朋友可以參考一下2013-12-12解析C#中的私有構(gòu)造函數(shù)和靜態(tài)構(gòu)造函數(shù)
這篇文章主要介紹了C#中的私有構(gòu)造函數(shù)和靜態(tài)構(gòu)造函數(shù),是C#入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01gridview的buttonfield獲取該行的索引值(實(shí)例講解)
本篇文章主要介紹了gridview的buttonfield獲取該行的索引值(實(shí)例講解)需要的朋友可以過來參考下,希望對(duì)大家有所幫助2014-01-01C#創(chuàng)建、部署、調(diào)用WebService圖文實(shí)例詳解
本文主要用詳細(xì)的圖文給大家介紹C#創(chuàng)建、部署、調(diào)用WebService的全部過程以及中間需要避免的問題。2017-11-11