構造函數在面試中常常出現,昨天面試有兩道關於構造函數的題目,因此作一下筆記,順便看看其餘大牛對構造函數有何高見。
靜態構造函數自動被調用,不能被顯式調用,在程序中,用戶沒法控制什麼時候執行靜態構造函數。 靜態構造函數既沒有訪問修飾符,也沒有參數。
一個類的靜態構造函數在這個類的任何實例被建立前執行。 一個類的靜態構造函數在類的任何靜態成員被引用前執行。一個類的靜態構造函數從不會被執行一次以上。
class Program { static void Main(string[] args) { BaseClass cla1 = new BaseClass(); BaseClass cla2 = new BaseClass(); BaseClass cla3 = new BaseClass(); BaseClass cla4 = new BaseClass(); Console.ReadKey(); } } class BaseClass { private static int callCounter; static BaseClass() { Console.WriteLine("callCounter1=" + callCounter); } public BaseClass() { callCounter += 1; Console.WriteLine("callCounter2=" + callCounter); } }
其結果爲:
class Program { static void Main(string[] args) { Class cla1 = new Class(); Console.ReadKey(); } } class BaseClass { private static int callCounter; static BaseClass() { Console.WriteLine("父類靜態callCounter1=" + callCounter); } public BaseClass() { callCounter += 1; Console.WriteLine("父類非靜態callCounter2=" + callCounter); } } class Class:BaseClass { private static int callCounter; static Class() { Console.WriteLine("子類靜態callCounter3=" + callCounter); } public Class() { callCounter += 1; Console.WriteLine("子類非靜態callCounter4=" + callCounter); } }
運行結果爲:
私有構造方法一般用在單件模式上面,關於單件模式的運用不是本文重點,重在說明當構造方法設置爲私有的話,那麼該類就沒法被其餘類去new了,由於私有的構造方法代替了默認的構造方法,若是想在另一個方法中獲得有私有構造方法的類的話,能夠封裝具備私有構造方法類的方法。
class Program { static void Main(string[] args) { //Singleton singleton = new Singleton();//會報錯 Singleton singleton = Singleton.GetClass(); Singleton singleton1 = Singleton.GetClass(); Console.WriteLine(singleton==singleton1); Console.ReadKey(); } } class Singleton { private Singleton() {} private static Singleton singleton=null; public static Singleton GetClass() { if (singleton == null) { Console.Write("初始化\n"); singleton= new Singleton(); } else { Console.Write("使用原來的\n"); } return singleton; } }
運行結果:html
//http://www.51cto.com/art/200708/53110.htm
//http://www.cnblogs.com/jincwfly/archive/2007/10/10/919886.html面試