類和結(jié)構(gòu)的區(qū)別
類(class)與結(jié)構(gòu)(struct)都是創(chuàng)建對象的模版,每個對象都包含數(shù)據(jù),并提供了處理和訪問數(shù)據(jù)的方法。類與結(jié)構(gòu)的區(qū)別是它們在內(nèi)存中的存儲方式、訪問方式和一些特性的不同。下面是學(xué)習(xí)啦小編為大家準(zhǔn)備的類和結(jié)構(gòu)的區(qū)別,希望大家喜歡!
類和結(jié)構(gòu)的區(qū)別篇一
結(jié)構(gòu)是一種用關(guān)鍵字struct聲明的自定義數(shù)據(jù)類型。與類相似,也可以包含構(gòu)造函數(shù),常數(shù),字段,方法,屬性,索引器,運算符和嵌套類型等,不過,結(jié)構(gòu)是值類型。
類和結(jié)構(gòu)的區(qū)別篇二
結(jié)構(gòu)的構(gòu)造函數(shù)和類的構(gòu)造函數(shù)不同。
a.結(jié)構(gòu)不能包含顯式的無參數(shù)構(gòu)造函數(shù)。結(jié)構(gòu)成員講自動初始化為它們的默認值。
b.結(jié)構(gòu)不能包含以下形式的初始值設(shè)定類:base(argument-list);
類和結(jié)構(gòu)的區(qū)別篇三
對于結(jié)構(gòu)中的實例字段成員,不能在聲明時賦值初始化。
類和結(jié)構(gòu)的區(qū)別篇四
聲明了結(jié)構(gòu)類型后,可以使用new運算符創(chuàng)建構(gòu)造對象,也可以不使用new關(guān)鍵字。如果不使用new,那么在初始化所有字段之前,字段將保持未賦值狀態(tài)且對象不可用。
類和結(jié)構(gòu)的區(qū)別篇五
結(jié)構(gòu)不支持繼承,即一個結(jié)構(gòu)不能從另一個結(jié)構(gòu)或類繼承,而且不能作為一個類的基類。但是,結(jié)構(gòu)從基類OBJECT繼承。結(jié)構(gòu)也可以實現(xiàn)接口。
類和結(jié)構(gòu)的區(qū)別篇六
什么時候用結(jié)構(gòu)呢?結(jié)構(gòu)使用簡單,并且很有用,但是要牢記:結(jié)構(gòu)在堆棧中創(chuàng)建,是值類型,而類是引用類型。每當(dāng)需要一種經(jīng)常使用的類型,而且大多數(shù)情況下該類型只是一些數(shù)據(jù)時,使用結(jié)構(gòu)能比使用類獲得更佳性能。
編者的話
結(jié)構(gòu)是值類型,所以會影響性能,但根據(jù)使用結(jié)構(gòu)的方式,這種影響可能是正面的,也可能是負面的。正面的影響是為結(jié)構(gòu)分配內(nèi)存時,速度非常快,因為它們將內(nèi)聯(lián)或者保存在堆棧中。在結(jié)構(gòu)超出了作用域被刪除時,速度也很快。另一方面,只要把結(jié)構(gòu)作為參數(shù)來傳遞或者把一個結(jié)構(gòu)賦給另一個結(jié)構(gòu)(例如A=B,其中A和B是結(jié)構(gòu)),結(jié)構(gòu)的所有內(nèi)容就被復(fù)制,而對于類,則只復(fù)制引用。這樣,就會有性能損失,根據(jù)結(jié)構(gòu)的大小,性能損失也不同。注意,結(jié)構(gòu)主要用于小的數(shù)據(jù)結(jié)構(gòu)。但當(dāng)把結(jié)構(gòu)作為參數(shù)傳遞給方法時,就應(yīng)把它作為ref參數(shù)傳遞,以避免性能損失——此時只傳遞了結(jié)構(gòu)在內(nèi)存中的地址,這樣傳遞速度就與在類中的傳遞速度一樣快了。另一方面,如果這樣做,就必須注意被調(diào)用的方法可以改變結(jié)構(gòu)的值。