構造函數

構造函數主要是用來建立對象時爲對象賦初值來初始化對象。總與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

相關文章
相關標籤/搜索