廈門功夫廣告設(shè)計(jì)網(wǎng)站建設(shè)工作室網(wǎng)站優(yōu)化排名資源
C#基礎(chǔ)——構(gòu)造函數(shù)、析構(gòu)函數(shù)
1、構(gòu)造函數(shù)
構(gòu)造函數(shù)是一種特殊的方法,用于在創(chuàng)建類的實(shí)例時(shí)進(jìn)行初始化操作。構(gòu)造函數(shù)與類同名,并且沒有返回類型。
構(gòu)造函數(shù)在對象創(chuàng)建時(shí)自動(dòng)調(diào)用,可以用來設(shè)置對象的初始狀態(tài)、分配內(nèi)存、初始化字段等操作。一個(gè)類可以定義多個(gè)構(gòu)造函數(shù),它們可以有不同的參數(shù)列表,稱為重載構(gòu)造函數(shù)。
構(gòu)造函數(shù)語法結(jié)構(gòu):
class ClassName
{// 默認(rèn)構(gòu)造函數(shù)public ClassName(){// 構(gòu)造函數(shù)的代碼邏輯}// 帶參數(shù)的構(gòu)造函數(shù)public ClassName(parameters){// 構(gòu)造函數(shù)的代碼邏輯}
}
class Person
{//get與set 代表展開了屬性賦值取值的過程//get表示當(dāng)使用這個(gè)屬性的時(shí)候會(huì)執(zhí)行的代碼//set表示為這個(gè)屬性賦值的時(shí)候會(huì)執(zhí)行的代碼public string Name { get; set; }public int Age { get; set; }// 默認(rèn)構(gòu)造函數(shù)public Person(){//this 關(guān)鍵字 代表當(dāng)前實(shí)例的對象,屬性都要 對象.屬性//在當(dāng)前類中,this代表當(dāng)前實(shí)例的對象,開發(fā)者不需要在創(chuàng)建了,//如果不寫this程序會(huì)自動(dòng)補(bǔ)充this.Name = "guobeibei";Age = 18;}// 帶參數(shù)的構(gòu)造函數(shù)(重構(gòu))//重構(gòu)是指在同一個(gè)類中定義多個(gè)不同參數(shù)的構(gòu)造函數(shù)public Person(string name, int age){Name = name;Age = age;}//還可以聲明靜態(tài)構(gòu)造函數(shù)static People() {//注意:靜態(tài)構(gòu)造函數(shù)不能直接進(jìn)行調(diào)用,是自動(dòng)調(diào)用的//(訪問實(shí)例構(gòu)造函數(shù)的時(shí)候會(huì)自動(dòng)激活靜態(tài)構(gòu)造函數(shù))Console.WriteLine("這是靜態(tài)構(gòu)造函數(shù)");}
}// 創(chuàng)建Person對象并使用構(gòu)造函數(shù)進(jìn)行初始化
Person person1 = new Person(); // 使用默認(rèn)構(gòu)造函數(shù)
Console.WriteLine(person1.Name); //郭貝貝// 使用帶參數(shù)的構(gòu)造函數(shù)(重構(gòu))
Person person2 = new Person("郭貝貝同學(xué)", 19);
Console.WriteLine(person2.Name); // 郭貝貝同學(xué)
Console.WriteLine(person2.Age); // 19
構(gòu)造函數(shù)與普通函數(shù)的區(qū)別?
兩者不同點(diǎn) | 構(gòu)造函數(shù) | 普通函數(shù) |
---|---|---|
觸發(fā)時(shí)機(jī) | 在創(chuàng)建類的實(shí)例(對象)時(shí)自動(dòng)觸發(fā),用于初始化對象的成員變量。 | 需要通過對象或類名來調(diào)用,根據(jù)需要手動(dòng)觸發(fā)執(zhí)行。 |
返回類型 | 沒有返回類型,包括void。它們的目的是初始化對象,而不是返回值。 | 具有返回類型,可以通過return語句返回值。 |
方法名 | 與類名相同,用于標(biāo)識(shí)該構(gòu)造函數(shù)用于創(chuàng)建對象的初始化工作。 | 可以自定義方法名,以便更好地描述方法的功能。 |
調(diào)用方式 | 由編譯器根據(jù)對象的創(chuàng)建來自動(dòng)調(diào)用,且每次創(chuàng)建對象時(shí)只能調(diào)用一次構(gòu)造函數(shù)。 | 需要通過對象或類名顯式調(diào)用,可以多次調(diào)用。 |
對象初始化 | 用于初始化對象的成員變量,為它們分配內(nèi)存并設(shè)置初始值。 | 可以對對象進(jìn)行操作和修改,但不會(huì)影響對象的創(chuàng)建和初始化。 |
構(gòu)造函數(shù)是用于對象的初始化,而普通函數(shù)主要用于對象的操作和行為。構(gòu)造函數(shù)在創(chuàng)建對象時(shí)自動(dòng)調(diào)用,而普通函數(shù)需要手動(dòng)調(diào)用。
2、析構(gòu)函數(shù)
構(gòu)造函數(shù)在調(diào)用的時(shí)候會(huì)分配一部分內(nèi)存,這塊內(nèi)存被放在了堆上,c#內(nèi)存回收機(jī)制屬于自動(dòng)回收,原則意義上來講不需要手動(dòng)釋放,但是如果能夠結(jié)合良好的編碼習(xí)慣,可以搭配類似于析構(gòu)函數(shù)之類的方法,讓內(nèi)存釋放更高效。
析構(gòu)函數(shù):當(dāng)引用對象被回收時(shí),會(huì)調(diào)用該函數(shù),可以在此處做一些內(nèi)存回收,一個(gè)類中只能有一個(gè)析構(gòu)函數(shù),不能繼承,也不能重載,不能被主動(dòng)調(diào)用,沒有修飾符,沒有參數(shù)。
語法結(jié)構(gòu)
class MyClass
{//析構(gòu)函數(shù)(前面帶一個(gè) ~)~MyClass(){// 在這里編寫析構(gòu)函數(shù)的代碼}
}
class People {//設(shè)置一個(gè)定時(shí)器:屬于連續(xù)執(zhí)行的屬性,可能不會(huì)被程序自動(dòng)釋放,容易一直占用內(nèi)存Timer timer { get; set; }public People() {Console.WriteLine("這是構(gòu)造函數(shù)");}~People() {timer = null;}
}