W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
構(gòu)造函數(shù)在類或結(jié)構(gòu)體上運(yùn)行初始化代碼。
構(gòu)造函數(shù)被定義為一個(gè)方法。
構(gòu)造函數(shù)具有與類型相同的名稱,并且沒有返回類型:
public class Person {
string name; // Define field
public Person (string n){ // Define constructor
name = n; // Initialization code
}
}
...
Person p = new Person ("CSS"); // Call constructor
實(shí)例構(gòu)造函數(shù)允許以下修飾符:
項(xiàng)目 | 修飾符 |
---|---|
訪問修飾符 | public internal private protected |
非托管代碼修飾符 | unsafe extern |
類或結(jié)構(gòu)可能重載構(gòu)造函數(shù)。
為了避免代碼重復(fù),一個(gè)構(gòu)造函數(shù)可以使用this關(guān)鍵字調(diào)用另一個(gè)構(gòu)造函數(shù):
using System;
public class Product {
public decimal Price;
public int Year;
public Product (decimal price) {
Price = price;
}
public Product (decimal price, int year) : this (price) {
Year = year;
}
}
當(dāng)一個(gè)構(gòu)造函數(shù)調(diào)用另一個(gè)時(shí),被調(diào)用的構(gòu)造函數(shù)首先執(zhí)行。
我們可以將表達(dá)式傳遞給另一個(gè)構(gòu)造函數(shù),如下所示:
public Product (decimal price, DateTime year) : this (price, year.Year) {
}
表達(dá)式本身不能使用這個(gè)引用。
對(duì)于類,當(dāng)且僅當(dāng)我們沒有定義任何構(gòu)造函數(shù)時(shí),C#編譯器自動(dòng)生成一個(gè)無(wú)參數(shù)的公共構(gòu)造函數(shù)。
對(duì)于結(jié)構(gòu)體,無(wú)參數(shù)構(gòu)造函數(shù)是struct的固有的;因此,我們不能定義我們自己的無(wú)參數(shù)構(gòu)造函數(shù)。
我們之前看到字段可以在它們的聲明中用默認(rèn)值初始化:
class Sprite {
int shields = 50; // Initialized first
int health = 100; // Initialized second
}
字段初始化發(fā)生在執(zhí)行構(gòu)造函數(shù)之前,并且在字段的聲明順序中。
構(gòu)造函數(shù)不需要公開。
有一個(gè)非公共構(gòu)造函數(shù)的常見原因是通過(guò)靜態(tài)方法調(diào)用來(lái)控制實(shí)例創(chuàng)建。
public class Class1 {
Class1() {} // Private constructor
public static Class1 Create (...) {
// call Class1 constructor here
}
}
靜態(tài)構(gòu)造函數(shù)對(duì)每個(gè)類型執(zhí)行一次,而不是每個(gè)實(shí)例執(zhí)行一次。
類型只能定義一個(gè)靜態(tài)構(gòu)造函數(shù),它必須是無(wú)參數(shù)的,并且具有與類型相同的名稱:
class Main {
static Main () {
Console.WriteLine ("Type Initialized");
}
}
運(yùn)行時(shí)在所使用的類型之前自動(dòng)調(diào)用靜態(tài)構(gòu)造函數(shù)。
有兩件事情觸發(fā)了:
靜態(tài)構(gòu)造函數(shù)允許的唯一修飾符是unsafe和extern。
靜態(tài)字段初始化器在調(diào)用靜態(tài)構(gòu)造函數(shù)之前運(yùn)行。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: