本篇文章給大家分享的是有關(guān)C#中怎么使用構(gòu)造函數(shù),小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
十載的平魯網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整平魯建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“平魯網(wǎng)站設(shè)計”,“平魯網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
C#構(gòu)造函數(shù)的名字不能隨便起,必須讓編譯器認得出才可以被自動執(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ù)提供給你。
class TestClass { public TestClass(): base() {} // 由CLR提供 }
下面列舉了幾種類型的C#構(gòu)造函數(shù)
1)缺省C#構(gòu)造函數(shù)
class TestClass { public TestClass(): base() {} }
上面已介紹,它由系統(tǒng)(CLR)提供。
2)實例C#構(gòu)造函數(shù)
實例C#構(gòu)造函數(shù)是實現(xiàn)對類中實例進行初始化的方法成員。如:
using System; class Point { public double x, y; public Point() { this.x = 0; this.y = 0; } public Point(double x, double y) { this.x = x; this.y = y; } … } class Test { static void Main() { Point a = new Point(); Point b = new Point(3, 4); // 用C#構(gòu)造函數(shù)初始化對象 … } }
聲明了一個類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ù)將不會被提供,這一點要注意。
3) 靜態(tài)C#構(gòu)造函數(shù)
靜態(tài)C#構(gòu)造函數(shù)是實現(xiàn)對一個類進行初始化的方法成員。它一般用于對靜態(tài)數(shù)據(jù)的初始化。靜態(tài)C#構(gòu)造函數(shù)不能有參數(shù),不能有修飾符而且不能被調(diào)用,當類被加載時,類的靜態(tài)C#構(gòu)造函數(shù)自動被調(diào)用。如:
using System.Data; class Employee { private static DataSet ds; static Employee() { ds = new DataSet(...); } ... }
聲明了一個有靜態(tài)C#構(gòu)造函數(shù)的類Employee。注意靜態(tài)C#構(gòu)造函數(shù)只能對靜態(tài)數(shù)據(jù)成員進行初始化,而不能對非靜態(tài)數(shù)據(jù)成員進行初始化。但是,非靜態(tài)C#構(gòu)造函數(shù)既可以對靜態(tài)數(shù)據(jù)成員賦值,也可以對非靜態(tài)數(shù)據(jù)成員進行初始化。
如果類僅包含靜態(tài)成員,你可以創(chuàng)建一個private的C#構(gòu)造函數(shù):private TestClass() {…},但是private意味著從類的外面不可能訪問該C#構(gòu)造函數(shù)。所以,它不能被調(diào)用,且沒有對象可以被該類定義實例化。
以上是幾種類型C#構(gòu)造函數(shù)的簡單運用,下面將重點介紹一下在類的層次結(jié)構(gòu)中(即繼承結(jié)構(gòu)中)基類和派生類的C#構(gòu)造函數(shù)的使用方式。派生類對象的初始化由基類和派生類共同完成:基類的成員由基類的C#構(gòu)造函數(shù)初始化,派生類的成員由派生類的C#構(gòu)造函數(shù)初始化。
當創(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ù)的成員初始化表中指出。如:
class A { private int x; public A( ) { x = 0; } public A( int i ) { x = i; } }; class B : A { private int y; public B( ) { y = 0; } public B( int i ) { y = i; } public B( int i, int j ):A(i) { y = j; } }; B b1 = new B(); //執(zhí)行基類A的C#構(gòu)造函數(shù)A(),再執(zhí)行派生類的C#構(gòu)造函數(shù)B() B b2 = new B(1); //執(zhí)行基類A的C#構(gòu)造函數(shù)A(),再執(zhí)行派生類的C#構(gòu)造函數(shù)B(int) B b3 = new B(0,1); //執(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),如下所示:
class A { private int x; public A( int i ) { x = i; } }; class B : A { private int y; public B():A(i) { y = 0; } public B(int i):A(i) { y = i; } public B(int i, int j):A(i) { y = j; } };
以上就是C#中怎么使用構(gòu)造函數(shù),小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。