淺析C#類和C#結(jié)構(gòu)體的關(guān)系
C#類:類是C# 中功能最為強(qiáng)大的數(shù)據(jù)類型,類也定義了數(shù)據(jù)類型的數(shù)據(jù)和行為。然后,程序員可以創(chuàng)建作為此類的實(shí)例的對(duì)象。
C#結(jié)構(gòu)體:結(jié)構(gòu)體是輕量型的類,使用開(kāi)銷相對(duì)于類較小。
C#類和C#結(jié)構(gòu)體兩者的關(guān)系:
1.數(shù)據(jù)類型:類和結(jié)構(gòu)體都是數(shù)據(jù)類型,類是引用類型,結(jié)構(gòu)體是值類型。
2.繼承性:類可以繼承和被繼承,而結(jié)構(gòu)體隱式繼承于object,不可以繼承(除接口以外)和被繼承
3.構(gòu)造函數(shù):類和結(jié)構(gòu)體都有默認(rèn)(無(wú)參)構(gòu)造函數(shù),只不過(guò)結(jié)構(gòu)體不能顯示聲明默認(rèn)(無(wú)參)構(gòu)造函數(shù),
4.字段初始化:類可以對(duì)字段聲明時(shí)賦值初始化,而結(jié)構(gòu)體不可以(除const和static之外),結(jié)構(gòu)體的字段必須在構(gòu)造函數(shù)中進(jìn)行初始化。
5.實(shí)例化:結(jié)構(gòu)體實(shí)例化時(shí)可以不使用new,,如果不使用new,那么在初始化所有字段之前,字段將保持未賦值狀態(tài)且對(duì)象不可用。而類必須使用new進(jìn)行實(shí)例化。
如何選擇C#結(jié)構(gòu)體還是C#類
討論了結(jié)構(gòu)與類的相同之處和差別之后,下面討論如何選擇使用結(jié)構(gòu)還是類:
1.堆棧的空間有限,對(duì)于大量的邏輯的對(duì)象,創(chuàng)建類要比創(chuàng)建結(jié)構(gòu)好一些
2.結(jié)構(gòu)表示如點(diǎn)、矩形和顏色這樣的輕量對(duì)象,例如,如果聲明一個(gè)含有 1000 個(gè)點(diǎn)對(duì)象的數(shù)組,則將為引用每個(gè)對(duì)象分配附加的內(nèi)存。在此情況下,結(jié)構(gòu)的成本較低。
3.在表現(xiàn)抽象和多級(jí)別的對(duì)象層次時(shí),類是***的選擇
4.大多數(shù)情況下該類型只是一些數(shù)據(jù)時(shí),結(jié)構(gòu)時(shí)***的選擇 ,struct 類型是一種值類型,通常用來(lái)封裝小型相關(guān)變量組,例如,矩形的坐標(biāo)或庫(kù)存商品的特征。
【編輯推薦】