“靜態構造函數”典型應用於第一次使用類時的初始化工作,注意“第一次”,意思是它只執行一次。 有同學說了,類的初始化不是有構造函數嘛?我們回答:構造函數是每個實例被聲明時都會執行的,它屬於每一個實例,而靜態構造函數卻屬於這個類本身。 比如,現在各大學校馬上開學了,這有個學號問題,學校規定:2013年入學的學生的學號統一編為“13xxxx”。那麼這個初始值13xxxx就是這個學生這個類群共有的一個牲,而並不是屬於某一個學生;而學號、姓名等都是某個學生獨有的屬性。 根據靜態構造函數只執行一次的特征,學校學生管理系統在某個配置文件裡寫了“130001”這個數字,學校管理系統一運行立馬讀取了這個數字,管理系統一看,噢,讓我從130001開始編學號啊! 代碼編寫時,我們先來建一個學生類
class Student
{
//先建立這個類所有的一個屬性:起始學號
private static int _startNumber;
//靜態構造函數用於讀取配置文件或數據庫中所設的起始數字。
static Student()
{
_startNumber = 130001; //假設這裡我們是從配置文件中讀取的130001
}
//學號字段
private int _code;
//學號屬性
public int Code
{
get { return _code; }
set { _code = value; }
}
//每次實例對象的時候學號自增1
public Student()
{
this._code=(_startNumber++);
}
我們實例兩個學生試試:
class Program
{
static void Main(string[] args)
{
Student s1 = new Student();
Console.WriteLine(s1.Code);
Student s2 = new Student();
Console.WriteLine(s2.Code);
}
}
結果: 130001 130002