構造函數主要是用來建立對象時爲對象賦初值來初始化對象。總與new運算符一塊兒使用在建立對象的語句中 。A a=new A();函數
構造函數具備和類同樣的名稱;但它是一個函數具備函數的全部特性,同一個類裏面能夠有多個參數不一樣的構造函數,也就是函數的多態。this
構造函數是在實例化類時最早執行的方法,經過這個特性能夠給對象賦初值。spa
構造函數沒有返回值,也不能用void修飾,只有訪問修飾符。code
每一個類中都會一個構造函數,若是用戶定義的類中沒有顯式的定義任何構造函數,編譯器就會自動爲該類型生成默認構造函數,類裏面沒有構造函數也能夠,系統會爲你自動建立無參構造函數。對象
例:class test //test類
{
public test()
{
//構造函數,初始化對象
}
}blog
構造函數,目的是用於初始化類。好比你定義了一個類A
class A
那麼構造函數寫法就是
public A() //括號內能夠有參數
{
//用於初始化的語句(沒有參數就叫作默認構造函數)
}
//注意:一個類能夠有多個構造函數,可根據其參數個數的不一樣或參數類型的不一樣來區分它們 即構造函數的重載。
每次要用類A時,好比 A a = new A(); //若是前面定義的構造函數有參數,那這裏必須傳參
構造函數不能被直接調用,必須經過new運算符在建立對象時纔會自動調用;而通常的方法是在程序執行到它的時候被調用的;每次實例化(既上面的new A())一個類時,就會調用構造函數。get
雖然在通常狀況下,構造函數不被顯式調用,而是在建立對象時自動被調用。可是並非不能被顯示調用。有些時候是必定要顯示調用的,只要是父類有帶參的構造函數,在子類中就必須顯示的調用父類的構造函數,由於子類的構造器在實例化時沒法找到父類的構造函數(當父類有本身寫的無參構造函數時,子類也不用顯示調用)。編譯器
構造函數的重載:所謂重載,就是參數列表不一樣的幾個同名方法,構造函數的重載其實和方法的重載沒什麼太大的區別,無非訪問修飾符爲public ,沒用返回值類型。下面寫一個小例子:string
1 class Animal 2 { 3 static void Main(string[] args) 4 { 5 //方法一 6 Animal animal1 = new Animal(); 7 animal1.Name = "兔子"; 8 animal1.Color = "白色"; 9 animal1.Speed = 20; 10 animal1.Run(); 11 //方法二 12 Animal animal2 = new Animal("兔子", "黑色"); 13 animal2.Run(30); 14 //方法三 15 Animal animal3 = new Animal("狗", "棕色", 50); 16 animal3.Run(); 17 Console.WriteLine(); 18 } 19 //構造函數重載 20 public Animal() 21 { 22 } 23 public Animal(string name, string color) 24 { 25 this.name = name; 26 this.color = color; 27 } 28 public Animal(string name, string color, int speed) 29 { 30 31 this.name = name; 32 33 this.color = color; 34 35 this.speed = speed; 36 }
37 //名稱 38 private string name; 39 public string Name 40 { 41 get { return name; } 42 set { name = value; } 43 } 44 //顏色 45 private string color; 46 public string Color 47 { 48 get { return color; } 49 set { color = value; } 50 } 51 //速度 52 private int speed; 53 public int Speed 54 { 55 get { return speed; } 56 set { speed = value; } 57 } 58 //方法的重載Run方法的不一樣實現 59 public void Run() 60 { 61 Console.WriteLine("一隻" + this.color + "的" + this.name + "正在以" + this.speed + "Km/h的速度在奔跑\n"); 62 63 } 64 public void Run(int speed) 65 { 66 67 Console.WriteLine("一隻" + this.color + "的" + this.name + "正在以" + speed + "km/h的速度在奔跑\n"); 68 69 } 70
71 }
結果以下圖所示:Run方法的兩種重載實現是同樣的。it