C# 结构体与类的区别
c#中的結(jié)構(gòu)體類型?
struct 類型是一種值類型,通常用來(lái)封裝小型相關(guān)變量組,例如,矩形的坐標(biāo)或庫(kù)存商品的特征。下面的示例顯示了一個(gè)簡(jiǎn)單的結(jié)構(gòu)聲明。
public struct PostalAddress
{
// Fields, properties, methods and events go here...
}
結(jié)構(gòu)與類共享幾乎所有相同的語(yǔ)法,但結(jié)構(gòu)比類受到的限制更多:
盡管結(jié)構(gòu)的靜態(tài)字段可以初始化,結(jié)構(gòu)實(shí)例字段聲明還是不能使用初始值設(shè)定項(xiàng)。
結(jié)構(gòu)不能聲明默認(rèn)構(gòu)造函數(shù)(沒(méi)有參數(shù)的構(gòu)造函數(shù))或析構(gòu)函數(shù)。
結(jié)構(gòu)的副本由編譯器自動(dòng)創(chuàng)建和銷毀,因此不需要使用默認(rèn)構(gòu)造函數(shù)和析構(gòu)函數(shù)。實(shí)際上,編譯器通過(guò)為所有字段賦予默認(rèn)值(參見(jiàn)默認(rèn)值表)來(lái)實(shí)現(xiàn)默認(rèn)構(gòu)造函數(shù)。結(jié)構(gòu)不能從類或其他結(jié)構(gòu)繼承。
結(jié)構(gòu)是值類型 -- 如果從結(jié)構(gòu)創(chuàng)建一個(gè)對(duì)象并將該對(duì)象賦給某個(gè)變量,變量則包含結(jié)構(gòu)的全部值。復(fù)制包含結(jié)構(gòu)的變量時(shí),將復(fù)制所有數(shù)據(jù),對(duì)新副本所做的任何修改都不會(huì)改變舊副本的數(shù)據(jù)。由于結(jié)構(gòu)不使用引用,因此結(jié)構(gòu)沒(méi)有標(biāo)識(shí) -- 具有相同數(shù)據(jù)的兩個(gè)值類型實(shí)例是無(wú)法區(qū)分的。C# 中的所有值類型本質(zhì)上都繼承自 ValueType,后者繼承自 Object。
編譯器可以在一個(gè)稱為裝箱的過(guò)程中將值類型轉(zhuǎn)換為引用類型。
結(jié)構(gòu)具有以下特點(diǎn):
結(jié)構(gòu)是值類型,而類是引用類型
向方法傳遞結(jié)構(gòu)時(shí).結(jié)構(gòu)是通過(guò)傳值方式傳遞的,不是作為引用方式傳遞.
與類不同,結(jié)構(gòu)的實(shí)例化可以不使用new運(yùn)算符.
結(jié)構(gòu)可以聲明構(gòu)造函數(shù),但他們必須帶參數(shù)
一個(gè)結(jié)構(gòu)不能從另一個(gè)結(jié)構(gòu)或類繼承,而且不能作為一個(gè)類的基。所有結(jié)構(gòu)都直接繼承自 System.ValueType,后者繼承自 System.Object。
結(jié)構(gòu)可以實(shí)現(xiàn)接口。
在結(jié)構(gòu)中初始化實(shí)例字段是錯(cuò)誤的。
轉(zhuǎn)載于:https://www.cnblogs.com/justForMe/archive/2011/02/27/1966373.html
總結(jié)
以上是生活随笔為你收集整理的C# 结构体与类的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Sql Server截断日志(转)
- 下一篇: c# char unsigned_dll