1.類的聲明
// 聲明一個(gè) Person 類
public class Person()
{
private string Name{ get; set; } // 這是 Person 類的一個(gè)自動(dòng)屬性
}
2.類的實(shí)例化
// 使用 new 關(guān)鍵字實(shí)例化一個(gè)Person對(duì)象
Person person = new Person();
講到實(shí)例化就有必要講講對(duì)象的生命周期了
構(gòu)造階段 :實(shí)例化一個(gè)對(duì)象時(shí),需要初始化該對(duì)象,這個(gè)過(guò)程叫構(gòu)造階段衅鹿。由構(gòu)造函數(shù)完成
析構(gòu)階段 :在刪除一個(gè)對(duì)象時(shí),常常需要執(zhí)行一些清理工作,例如果漾,釋放內(nèi)存,這由析構(gòu)函數(shù)完成谷誓。
構(gòu)造函數(shù):
構(gòu)造函數(shù)又分為靜態(tài)構(gòu)造函數(shù)和實(shí)例構(gòu)造函數(shù)绒障,構(gòu)造函數(shù)名稱和類名相同,無(wú)返回值
靜態(tài)構(gòu)造函數(shù):在類的第一個(gè)實(shí)例創(chuàng)建時(shí)或引用任何靜態(tài)成員之前捍歪,將自動(dòng)調(diào)用靜態(tài)構(gòu)造函數(shù)户辱。
特點(diǎn):
- 無(wú)法直接調(diào)用靜態(tài)構(gòu)造函數(shù)
- 典型用途:當(dāng)類使用日志文件時(shí),將使永這種夠工作函數(shù)向日志文件中寫入項(xiàng)
- 如果靜態(tài)構(gòu)造函數(shù)引發(fā)異常糙臼,運(yùn)行時(shí)將不會(huì)再次調(diào)用改構(gòu)造函數(shù)庐镐,并在運(yùn)行程序所在的應(yīng)用程序域的生存期內(nèi),類型將保持未初始化
實(shí)例構(gòu)造函數(shù):在使用new表達(dá)式創(chuàng)建一個(gè)類的實(shí)例時(shí)变逃,會(huì)使用實(shí)例構(gòu)造函數(shù)創(chuàng)建和初始化所有實(shí)例成員變量
特點(diǎn):
- 若類中未顯示聲明實(shí)例構(gòu)造函數(shù)焚鹊,編譯器會(huì)生成一個(gè)默認(rèn)構(gòu)造器來(lái)初始化成員屬性。比如 int 初始化為 0。參見(jiàn) 默認(rèn)值表
- 若未聲明構(gòu)造函數(shù)的訪問(wèn)修飾符末患,默認(rèn)是私有的(private),外部類不能通過(guò)此函數(shù)來(lái)實(shí)例化
- 便利構(gòu)造函數(shù)可以方便初始化實(shí)例成員
public class Person()
{
// 這是 Person 類的一個(gè)自動(dòng)屬性
private string Name{ get; set; }
// 靜態(tài)構(gòu)造函數(shù)
static Person()
{
}
// 默認(rèn)實(shí)例構(gòu)造函數(shù)
public Person()
{
}
// 自定義便利構(gòu)造函數(shù)
public Person(string name)
{
this.Name = name;
}
// Person類的析構(gòu)函數(shù)
~Person()
{
}
析構(gòu)函數(shù)
.NET Framework 使用析構(gòu)函數(shù)來(lái)清理對(duì)象研叫。一般情況下,不需要提供析構(gòu)函數(shù)的代碼璧针,而是由默認(rèn)的析構(gòu)函數(shù)自動(dòng)執(zhí)行操作嚷炉。但是,如果在刪除對(duì)象實(shí)例前探橱,需要完成一些重要的操作申屹,就應(yīng)提供具體的析構(gòu)函數(shù)。
例如隧膏,如果變量超出了范圍哗讥,代碼就不能訪問(wèn)它,但該變量仍存在于計(jì)算機(jī)內(nèi)存的某個(gè)地方胞枕。只有在.NET 運(yùn)行程序執(zhí)行其垃圾回收杆煞,進(jìn)行清理時(shí),該實(shí)例才被徹底刪除
3.成員變量和屬性
// 聲明一個(gè) Person 類
public class Person()
{
public string Name{ get; set; } // 自動(dòng)屬性腐泻,編譯器會(huì)自動(dòng)生成set决乎、get方法
// 成員變量
private int _age;
// 屬性
public int Age{
get{return _age;}
set{_age = value;}
}
}
成員變量和屬性的區(qū)別:成員變量就是普通的變量,屬性和變量不同的是就是多了設(shè)置器和訪問(wèn)器派桩,這樣就可以過(guò)濾一些非法的賦值构诚。
【原】