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