實例構(gòu)造函數(shù)
實例構(gòu)造函數(shù)是一個特殊的方法,它在創(chuàng)建類的每個新實例時執(zhí)行。
- 構(gòu)造函數(shù)用于初始化類實例的狀態(tài)。
- 如果希望能從類的外部創(chuàng)建類的實例,需要將構(gòu)造函數(shù)聲明為public。 圖7-2闡述了構(gòu)造函數(shù)的語法。除了下面這幾點,構(gòu)造函數(shù)看起來很像類聲明中的其他方法。
?
例如,下面的類使用構(gòu)造函數(shù)初始化其字段。本例中,它有一個名為TimeOfInstantiation 的字段被初始化為當(dāng)前的日期和時間。
class MyClass
{
DateTime TimeOfInstantiation; //字段
...
pubic MyClass() //構(gòu)造函數(shù)
{
TimeOfInstantiation =DateTime.Now; //初始化字段
}
...
}
說明 在學(xué)完靜態(tài)屬性那一節(jié)后,我們可以仔細看看初始化TimeOfInstantiation那一行。 DateTime類(實際上它是一個結(jié)構(gòu),但由于還沒介紹結(jié)構(gòu),你可以把它先當(dāng)成類)是從 BCL中引入的,Now是類DateTime的靜態(tài)屬性。Now屬性創(chuàng)建了一個新的DateTime類的 實例,將其初始化為系統(tǒng)時鐘中的當(dāng)前日期和時間,并返回新DateTime實例的引用。
帶參數(shù)的構(gòu)造函數(shù)
構(gòu)造函數(shù)在下列方面和其他方法相似。
- 構(gòu)造函數(shù)可以帶參數(shù)。參數(shù)的語法和其他方法完全相同。
- 構(gòu)造函數(shù)可以被重載。 在使用創(chuàng)建對象表達式創(chuàng)建類的新實例時,要使用new運算符,后面跟著類的某個構(gòu)造函數(shù)。 new運算符使用該構(gòu)造函數(shù)創(chuàng)建類的實例。 例如,在下面的代碼中,Class1有3個構(gòu)造函數(shù):一個不帶參數(shù),一個帶int參數(shù),一個帶 string參數(shù)。Main使用各個構(gòu)造函數(shù)分別創(chuàng)建實例。
class Class1
{
int Id;
string Name;
public Class1(){Id=28;Name="Nemo";} //構(gòu)造函數(shù)0
public Class1() {ID=val;nameof="Nemo";} //構(gòu)造函數(shù)1
public Class1(String name){Name=name;} //構(gòu)造函數(shù)2
public void SoundOff()
{
Console.WriteLine($"Name{Name},Id{Id}");
}
}
class Program
{
static void Main()
{
Class1 a=new Class1(); //調(diào)用構(gòu)造函數(shù)0
b=new Class1(7); //調(diào)用構(gòu)造函數(shù)1
c=new Class1("Bill"); //調(diào)用構(gòu)造函數(shù)2
a.SoundOff();
b.SoundOff();
c.SoundOff();
}
}
默認(rèn)構(gòu)造函數(shù)
如果在類的聲明中沒有顯式地提供實例構(gòu)造函數(shù),那么編譯器會提供一個隱式的默認(rèn)構(gòu)造函 數(shù),它有以下特征。
如果你為類聲明了任何構(gòu)造函數(shù),那么編譯器將不會為該類定義默認(rèn)構(gòu)造函數(shù)。 例如,下面代碼中的Class2聲明了兩個構(gòu)造函數(shù)。
- 因為已經(jīng)至少有一個顯式定義的構(gòu)造函數(shù),所以編譯器不會創(chuàng)建額外的構(gòu)造函數(shù)。
- 在Main中,試圖使用不帶參數(shù)的構(gòu)造函數(shù)創(chuàng)建新的實例。因為沒有無參數(shù)的構(gòu)造函數(shù), 所以編譯器會產(chǎn)生一條錯誤消息。
class Class2
{
publicClass2(int Value) {...} //構(gòu)造函數(shù)0
publicClass2(String Value){...} //構(gòu)造函數(shù)1
}
class Program
{
static void Main()
{
Class2 a=new Class2(); //錯誤!沒有無參數(shù)的構(gòu)造函數(shù)
...
}
}
說明 可以像對其他成員那樣,對實例構(gòu)造函數(shù)設(shè)置訪問修飾符??梢詫?gòu)造函數(shù)聲明為public, 這樣在類的外部也能創(chuàng)建類的實例。也可以創(chuàng)建private構(gòu)造函數(shù),這樣在類外部就不 能調(diào)用該構(gòu)造函數(shù),但在類內(nèi)部可以。
該文章在 2025/5/21 9:28:24 編輯過