構造函數是和類名相同的類的一個方法,如果沒有顯式的聲明,在系統會在編譯的時候,自動生成一 個不帶參數的,不執行任何動作的構造函數。
但如果顯式的聲明了構造函數,系統就不會自動生成了。如果聲明的構造函數是有參數的構造函數, 我們在實例化類的時候,就必須以該構造函數而實例化類。看下面的代碼:
using System;
namespace gosoa.com.cn
{
public class test
{
public int num;
public test (int i)
{
this.num=i+5;
}
static void Main()
{
test classOne=new test(10);
int x=classOne.num;
Console.WriteLine(x);
}
}
}
如上代碼,在實例化類的時候,test classOne=new test(10); 傳遞了一個參數。如果我們test classOne=new test();這樣來實例化類,就會報錯了。因為我們顯式的聲明了一個帶參的構造方法,new test() 這樣實例化的時候,調用的是無參的構造函數,但類中卻沒有無參的構造函數。
我們再來看一下靜態構造函數。
在C# 中我們可以給類定義一個無參的靜態構造函數(注意,必須是無參的),只要創建類的對象,該 方法就會執行。該函數只執行一次,並且在代碼引用類之前執行。
一般,在類中有一些靜態字段或者屬性,需要在第一次使用類之前從外部數據源初始化這些靜態字段 和屬性,這時,我們就采用靜態構造函數的方式來解決。
靜態構造函數沒有訪問修飾符,其他C#代碼也不調用它,在加載類時,總是由.Net 運行庫調用它。一 個類只能有一個靜態構造函數。
注意,無參的實例構造函數可以和靜態構造函數在類中共存。因為靜態構造函數是在加載類的時候執 行的,而實例構造函數是在創建實例時執行的,兩者並不沖突。