在一個類中如果需要實現多個自定義構造函數,通常做法是在構造函數中實現各自的業務邏輯,如果這些業務邏輯的實現并非截然不同的話,顯然不符合oop編程思想,極不利于維護,當然,我們也可以通過將相同的邏輯部分封裝成一個方法,但還有一種更為合理簡單的方法,下面就通過this關鍵字來實現串聯構造函數做一簡單示例。
示例代碼如下:
1 public class Person 2 { 3 public string personName; 4 //定義年齡為可空類型,這樣就可以賦予其null值 5 public int? personAge; 6 7 //下面前三個構造函數都是去調用參數最多的第四個構造函數,只取它們所需要的部分參數即可 8 //這樣的做法就是this串聯構造函數 9 public Person():this("",0)10 {11 12 }13 14 public Person(string name):this("evan",null)15 {16 17 }18 19 public Person(int age):this("",20)20 { 21 22 }23 24 public Person(string name, int? age)25 {26 this.personName = name;27 //通過 ?? 判斷傳入的age是否null值28 //如果屬于null值,則賦值10029 this.personAge = age ?? 100;30 }31 32 public void Display()33 {34 Console.WriteLine("Name:{0},Age:{1}/n", personName, personAge);35 } 36 }主函數調用如下:
1 static void Main(string[] args) 2 { 3 Person per1 = new Person(); 4 per1.Display(); 5 6 Person per2 = new Person(20); 7 per2.Display(); 8 9 Person per3 = new Person("evan");10 per3.Display(); 11 12 Person per4 = new Person("evan", 20);13 per4.Display();14 15 Console.ReadLine(); 16 }這樣的做法就是讓一個接受參數最多的構造函數做"主構造函數", 且在主構造函數中實現必須的業務邏輯,其余的構造函數只要使用this關鍵字把傳入的參數轉發給主構造函數,并且提供必須的其它參數,這樣子,我們整個類中需要我們操心的就是那個主構造函數了,其余構造函數基本上可以為空。
(注意:如果構造函數鏈中還有實現各自的邏輯,那么實際上是先執行主構造函數的代碼,再執行各自邏輯),使用這種做法,真正的工作都交給了一個構造函數,類定義就會更簡潔、更易維護、簡化了編程任務。
新聞熱點
疑難解答