C#基礎(二)——C#中的構造函數


構造函數主要是用來創建對象時為對象賦初值來初始化對象。總與new運算符一起使用在創建對象的語句中 。A a=new A();

構造函數具有和類一樣的名稱;但它是一個函數具有函數的所有特性,同一個類里面可以有多個參數不同的構造函數,也就是函數的多態。

構造函數是在實例化類時最先執行的方法,通過這個特性可以給對象賦初值。

構造函數沒有返回值,也不能用void修飾,只有訪問修飾符。

每個類中都會一個構造函數,如果用戶定義的類中沒有顯式的定義任何構造函數,編譯器就會自動為該類型生成默認構造函數,類里面沒有構造函數也可以,系統會為你自動創建無參構造函數。

 

例:class test //test類
{
   public test()
    {
     //構造函數,初始化對象
   }
}

構造函數,目的是用於初始化類。比如你定義了一個類A
class A
那么構造函數寫法就是
public A()  //括號內可以有參數
{
   //用於初始化的語句(沒有參數就叫做默認構造函數)
}
//注意:一個類可以有多個構造函數,可根據其參數個數的不同或參數類型的不同來區分它們 即構造函數的重載。
每次要用類A時,比如 A a = new A(); //如果前面定義的構造函數有參數,那這里必須傳參
構造函數不能被直接調用,必須通過new運算符在創建對象時才會自動調用;而一般的方法是在程序執行到它的時候被調用的;每次實例化(既上面的new A())一個類時,就會調用構造函數。

雖然在一般情況下,構造函數不被顯式調用,而是在創建對象時自動被調用。但是並不是不能被顯示調用。有些時候是一定要顯示調用的,只要是父類有帶參的構造函數,在子類中就必須顯示的調用父類的構造函數,因為子類的構造器在實例化時無法找到父類的構造函數(當父類有自己寫的無參構造函數時,子類也不用顯示調用)。

構造函數的重載:所謂重載,就是參數列表不同的幾個同名方法,構造函數的重載其實和方法的重載沒什么太大的區別,無非訪問修飾符為public ,沒用返回值類型。下面寫一個小例子:

 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方法的兩種重載實現是一樣的。

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM