自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#構(gòu)造函數(shù)的運(yùn)用淺析

開發(fā) 后端
C#構(gòu)造函數(shù)的運(yùn)用是什么樣子的呢?C#構(gòu)造函數(shù)的運(yùn)用具體的效果是什么呢?那么本文就向你介紹這方面的內(nèi)容。

C#構(gòu)造函數(shù)的名字不能隨便起,必須讓編譯器認(rèn)得出才可以被自動執(zhí)行。它的命名方法既簡單又合理:讓C#構(gòu)造函數(shù)與類同名。除了名字外,C#構(gòu)造函數(shù)的另一個特別之處是沒有返回值類型,這與返回值類型為void的函數(shù)不同。如果它有返回值類型,那么編譯器將不知所措。在你可以訪問一個類的方法、屬性或任何其它東西之前, ***條執(zhí)行的語句是包含有相應(yīng)類的C#構(gòu)造函數(shù)。甚至你自己不寫一個C#構(gòu)造函數(shù),也會有一個缺省C#構(gòu)造函數(shù)提供給你。

  1. class TestClass  
  2. {  
  3.  public TestClass(): base() {} // 由CLR提供  
  4. }  

下面列舉了幾種類型的C#構(gòu)造函數(shù)

1)缺省C#構(gòu)造函數(shù)

  1. class TestClass  
  2. {  
  3.  public TestClass(): base() {}   
  4. }  

上面已介紹,它由系統(tǒng)(CLR)提供。

2)實(shí)例C#構(gòu)造函數(shù)

實(shí)例C#構(gòu)造函數(shù)是實(shí)現(xiàn)對類中實(shí)例進(jìn)行初始化的方法成員。如:

  1. using System;  
  2. class Point  
  3. {  
  4.  public double x, y;  
  5.  public Point()   
  6.  {  
  7. this.x = 0;  
  8. this.y = 0;  
  9.  }  
  10.  
  11.  public Point(double x, double y)  
  12.  {  
  13. this.x = x;  
  14. this.y = y;  
  15.  }  
  16.  …  
  17. }  
  18.  
  19. class Test  
  20. {  
  21.  static void Main()   
  22.  {  
  23. Point a = new Point();  
  24. Point b = new Point(3, 4); // 用C#構(gòu)造函數(shù)初始化對象  
  25. …  
  26.  }  
  27. }  

聲明了一個類Point,它提供了兩個C#構(gòu)造函數(shù)。它們是重載的。一個是沒有參數(shù)的PointC#構(gòu)造函數(shù)和一個是有兩個double參數(shù)的PointC#構(gòu)造函數(shù)。如果類中沒有提供這些C#構(gòu)造函數(shù),那么會CLR會自動提供一個缺省C#構(gòu)造函數(shù)的。但一旦類中提供了自定義的C#構(gòu)造函數(shù),如Point()和Point(double x, double y),則缺省C#構(gòu)造函數(shù)將不會被提供,這一點(diǎn)要注意。

3) 靜態(tài)C#構(gòu)造函數(shù)

靜態(tài)C#構(gòu)造函數(shù)是實(shí)現(xiàn)對一個類進(jìn)行初始化的方法成員。它一般用于對靜態(tài)數(shù)據(jù)的初始化。靜態(tài)C#構(gòu)造函數(shù)不能有參數(shù),不能有修飾符而且不能被調(diào)用,當(dāng)類被加載時,類的靜態(tài)C#構(gòu)造函數(shù)自動被調(diào)用。如:

  1. using System.Data;  
  2. class Employee  
  3. {  
  4.  private static DataSet ds;  
  5.  static Employee()  
  6.  {  
  7. ds = new DataSet(...);  
  8.  }  
  9.  ...  
  10. }  

聲明了一個有靜態(tài)C#構(gòu)造函數(shù)的類Employee。注意靜態(tài)C#構(gòu)造函數(shù)只能對靜態(tài)數(shù)據(jù)成員進(jìn)行初始化,而不能對非靜態(tài)數(shù)據(jù)成員進(jìn)行初始化。但是,非靜態(tài)C#構(gòu)造函數(shù)既可以對靜態(tài)數(shù)據(jù)成員賦值,也可以對非靜態(tài)數(shù)據(jù)成員進(jìn)行初始化。

如果類僅包含靜態(tài)成員,你可以創(chuàng)建一個private的C#構(gòu)造函數(shù):private TestClass() {…},但是private意味著從類的外面不可能訪問該C#構(gòu)造函數(shù)。所以,它不能被調(diào)用,且沒有對象可以被該類定義實(shí)例化。

以上是幾種類型C#構(gòu)造函數(shù)的簡單運(yùn)用,下面將重點(diǎn)介紹一下在類的層次結(jié)構(gòu)中(即繼承結(jié)構(gòu)中)基類和派生類的C#構(gòu)造函數(shù)的使用方式。派生類對象的初始化由基類和派生類共同完成:基類的成員由基類的C#構(gòu)造函數(shù)初始化,派生類的成員由派生類的C#構(gòu)造函數(shù)初始化。

當(dāng)創(chuàng)建派生類的對象時,系統(tǒng)將會調(diào)用基類的C#構(gòu)造函數(shù)和派生類的C#構(gòu)造函數(shù),構(gòu) 造函數(shù)的執(zhí)行次序是:先執(zhí)行基類的C#構(gòu)造函數(shù),再執(zhí)行派生類的C#構(gòu)造函數(shù)。如果派生類又有對象成員,則,先執(zhí)行基類的C#構(gòu)造函數(shù),再執(zhí)行成員對象類的C#構(gòu)造函數(shù),***執(zhí)行派生類的C#構(gòu)造函數(shù)。

至于執(zhí)行基類的什么C#構(gòu)造函數(shù),缺省情況下是執(zhí)行基類的無參C#構(gòu)造函數(shù),如果要執(zhí)行基類的有參C#構(gòu)造函數(shù),則必須在派生類C#構(gòu)造函數(shù)的成員初始化表中指出。如:

  1. class A  
  2. private int x;  
  3.  public A( ) { x = 0; }  
  4.  public A( int i ) { x = i; }  
  5. };  
  6.  
  7. class B : A  
  8. private int y;  
  9.  public B( ) { y = 0; }  
  10.  public B( int i ) { y = i; }  
  11.  public B( int i, int j ):A(i) { y = j; }  
  12. };  
  13.  
  14. B b1 = new B();   
  15. //執(zhí)行基類A的C#構(gòu)造函數(shù)A(),再執(zhí)行派生類的C#構(gòu)造函數(shù)B()  
  16. B b2 = new B(1);   
  17. //執(zhí)行基類A的C#構(gòu)造函數(shù)A(),再執(zhí)行派生類的C#構(gòu)造函數(shù)B(int)  
  18. B b3 = new B(0,1);   
  19. //執(zhí)行執(zhí)行基類A的C#構(gòu)造函數(shù)A(int) ,再執(zhí)行派生類的   

C#構(gòu)造函數(shù)B(int,int)

在這里C#構(gòu)造函數(shù)的執(zhí)行次序是一定要分析清楚的。另外,如果基類A中沒有提供無參C#構(gòu)造函數(shù)public A( ) { x = 0; },則在派生類的所有C#構(gòu)造函數(shù)成員初始化表中必須指出基類A的有參C#構(gòu)造函數(shù)A(i),如下所示:

  1. class A  
  2. private int x;  
  3.  public A( int i ) { x = i; }  
  4. };  
  5.  
  6. class B : A  
  7. private int y;  
  8.  public B():A(i) { y = 0; }  
  9.  public B(int i):A(i) { y = i; }  
  10.  public B(int i, int j):A(i) { y = j; }  
  11. };   

C#構(gòu)造函數(shù)的運(yùn)用就向你介紹到這里,希望對你學(xué)習(xí)C#構(gòu)造函數(shù)的運(yùn)用有所幫助。

【編輯推薦】

  1. C#結(jié)構(gòu)體變量學(xué)習(xí)淺談
  2. 解析C#結(jié)構(gòu)體指針
  3. C#指針使用簡析
  4. C#結(jié)構(gòu)學(xué)習(xí)的詳細(xì)介紹
  5. 關(guān)于C#結(jié)構(gòu)的一些認(rèn)識
責(zé)任編輯:仲衡 來源: 互聯(lián)網(wǎng)轉(zhuǎn)載
相關(guān)推薦

2009-08-14 09:15:28

C#調(diào)用構(gòu)造函數(shù)

2009-07-31 15:44:02

C#靜態(tài)構(gòu)造函數(shù)

2009-08-14 09:43:59

C#復(fù)制構(gòu)造函數(shù)

2009-08-14 09:58:09

C#復(fù)制構(gòu)造函數(shù)

2009-08-13 18:15:06

C#繼承構(gòu)造函數(shù)

2009-08-13 18:02:11

C#靜態(tài)構(gòu)造函數(shù)

2009-09-18 09:02:45

CLR Via C#

2009-08-13 17:30:30

C#構(gòu)造函數(shù)

2009-08-13 13:42:54

C#構(gòu)造函數(shù)

2009-08-14 09:50:46

C#復(fù)制構(gòu)造函數(shù)

2009-08-13 18:36:36

C#繼承構(gòu)造函數(shù)

2009-08-24 13:41:23

C# 泛型約束

2009-08-13 18:10:31

C#靜態(tài)構(gòu)造函數(shù)

2009-11-17 09:07:55

靜態(tài)構(gòu)造函數(shù)

2011-06-11 21:36:44

C#C++

2009-07-31 14:15:38

C# 構(gòu)造函數(shù)

2009-08-24 18:09:13

C#構(gòu)造函數(shù)

2009-08-10 14:43:03

C#函數(shù)Convert

2009-07-31 16:00:30

C#函數(shù)重載

2009-07-31 14:03:21

C# Format函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號