“靜態構造函數”典型應用於第一次使用類時的初始化工作,注意“第一次”,意思是它只執行一次。 有同學說了,類的初始化不是有構造函數嘛?我們回答:構造函數是每個實例被聲明時都會執行的,它屬於每一個實例,而靜態構造函數卻屬於這個類本身。 比如,現在各大學校馬上開學了,這有個學號問題,學校規定: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