程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> this關鍵字實現串聯構造函數調用,關鍵字構造函數

this關鍵字實現串聯構造函數調用,關鍵字構造函數

編輯:C#入門知識

this關鍵字實現串聯構造函數調用,關鍵字構造函數


      在一個類中如果需要實現多個自定義構造函數,通常做法是在構造函數中實現各自的業務邏輯,如果這些業務邏輯的實現並非截然不同的話,顯然不符合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值,則賦值100
29             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關鍵字把傳入的參數轉發給主構造函數,並且提供必須的其它參數,這樣子,我們整個類中需要我們操心的就是那個主構造函數了,其余構造函數基本上可以為空。

(注意:如果構造函數鏈中還有實現各自的邏輯,那麼實際上是先執行主構造函數的代碼,再執行各自邏輯),使用這種做法,真正的工作都交給了一個構造函數,類定義就會更簡潔、更易維護、簡化了編程任務。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved