第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c#語言中,結(jié)構(gòu)體和類的區(qū)別?

c#語言中,結(jié)構(gòu)體和類的區(qū)別?

C#
慕容3067478 2019-03-12 09:08:38
c#語言中,結(jié)構(gòu)體和類的區(qū)別?
查看完整描述

3 回答

?
DIEA

TA貢獻1820條經(jīng)驗 獲得超2個贊

第一個問題:,“結(jié)構(gòu)體”和“類”有啥區(qū)別?怎樣辨別是結(jié)構(gòu)體還是類!
結(jié)構(gòu)體是一種值類型,而類是引用類型。(值類型、引用類型是根據(jù)數(shù)據(jù)存儲的角度來分的)
就是值類型用于存儲數(shù)據(jù)的值,引用類型用于存儲對實際數(shù)據(jù)的引用。那么結(jié)構(gòu)體就是當成值來使用的,類則通過引用來對實際數(shù)據(jù)操作。
第二個問題:兩者里面是不是都有構(gòu)造函數(shù)?為什么結(jié)構(gòu)體用得比較少?
構(gòu)造函數(shù)是為了初始化類的字段而存在的,而結(jié)構(gòu)體并不需要初始化就能使用,因此,結(jié)構(gòu)體中并不存在構(gòu)造函數(shù)。
不能以使用多少來衡量,只是看相應(yīng)問題使用最適合的方法罷了。結(jié)構(gòu)體的定義是:有些數(shù)據(jù)既是相互關(guān)聯(lián)的,又共同描述一個完整事物,如:一個學生的整體信息,學號、姓名、性別等。而類則使用在需要比較有層次的數(shù)據(jù)上面。


查看完整回答
反對 回復(fù) 2019-03-21
?
MMMHUHU

TA貢獻1834條經(jīng)驗 獲得超8個贊

1,結(jié)構(gòu)是實值類型(Value Types),而類則是引用類型(Reference Types)。

2,結(jié)構(gòu)使用棧存儲(Stack Allocation),而類使用堆存儲(Heap Allocation)。

3,所有結(jié)構(gòu)成員默認都是Public,而類的變量和常量數(shù)則默認位Private,不過其他類成員默認都是Public。

4,結(jié)構(gòu)成員不能被聲明位Protected,而類成員可以。

5,結(jié)構(gòu)變量聲明不能指定初始值、使用New關(guān)鍵字貨對數(shù)組進行初始化,但是類變量聲明可以。

6,結(jié)構(gòu)不能聲明默認的構(gòu)造函數(shù),也就是不擁有參數(shù)的非共享構(gòu)造函數(shù),但是類則無此限制。

7,二者都可以擁有共享構(gòu)造函數(shù),結(jié)構(gòu)的共享構(gòu)造函數(shù)不能帶有參數(shù),但是類的共享構(gòu)造函數(shù)則可以帶或者不帶參數(shù)。

8,結(jié)構(gòu)不允許聲明析構(gòu)函數(shù)(Destructor),類則無此限制。

9,結(jié)構(gòu)的實例(Instance)聲明,不允許對包含的變量進行初始化設(shè)定,類則可以在聲明類的實例時,同時進行變量初始化。

10,結(jié)構(gòu)是隱式繼承自ValueType類,而且不能繼承任何其他類型,類則可以繼續(xù)自ValueType以外的任何類。

11,結(jié)構(gòu)是無法被繼承的,類則可以。

12,結(jié)構(gòu)永遠不會終止,因此CLR不會在任何結(jié)構(gòu)上調(diào)用Finalize方法。類則是由內(nèi)存回收進程加以終止,當內(nèi)存回收進程檢測到?jīng)]有任何作用的類時,它就會調(diào)用類的Finalize方法。

13,結(jié)構(gòu)不需要構(gòu)造函數(shù),類則需要構(gòu)造函數(shù)。

14,結(jié)構(gòu)只能在一種情況下使用非共享構(gòu)造函數(shù),那就是非共享構(gòu)造函數(shù)會接受參數(shù)。但是類則無此限制,它可以使用帶參數(shù)或不帶參數(shù)的非共享構(gòu)造函數(shù)。

14,每一個結(jié)構(gòu)都具有無參數(shù)的隱含公共構(gòu)造函數(shù),此構(gòu)造函數(shù)會將結(jié)構(gòu)的所有成員初始化為其默認值。不需要重新定義這個行為。

在“實例和變量”層面上,由于結(jié)構(gòu)是數(shù)值類型的,因此每一個結(jié)構(gòu)變量會永遠的綁定到結(jié)構(gòu)實例上。然而類是引用類型的,而且對象變量可引用不同的類實例,在此方面的區(qū)別,會對使用將結(jié)構(gòu)和類造成如下的影響:

15,結(jié)構(gòu)變量會隱式的使用結(jié)構(gòu)的無參數(shù)構(gòu)造函數(shù)來初始化成員,這就意味語句 Struct S = new Struct()。

16,當您將一個結(jié)構(gòu)變量賦值給另一個,或者將結(jié)構(gòu)實例傳遞到程序變量時,所有變量成員的值會復(fù)制到新的結(jié)構(gòu)中。當您將一個對象變量賦值給另一個,或者將對象變量傳遞給程序時,則只是復(fù)制指針。

17,您可以將Null值賦值給結(jié)構(gòu)變量,但是該實例會一直與該變量保持關(guān)聯(lián)。雖然變量成員會因此賦值而重新初始化,但是您還是可以調(diào)用變量的方法并訪問其數(shù)據(jù)成員。相反的,如果您將對象變量設(shè)定為Null,您就會中斷它與任何類型實例的關(guān)聯(lián),而且除非您再將另一個實例賦值給它,否則無法通過變量訪問任何成員。

18,您可以在不同時間將不同的類的實例賦值給同一個對象變量,而且在同一時間可有好幾個對象變量引用相同的類實例,如果您對類成員值做了改變,則其他指向相同實例的對象變量也會發(fā)生改變。然而,結(jié)構(gòu)成員則會封裝在他們自己的實例中,變更結(jié)構(gòu)成員值并不會對其他任何結(jié)構(gòu)變量的成員造成影響,甚至也不會影響相同結(jié)構(gòu)聲明的其他實例。

19,兩個結(jié)構(gòu)必須以成員對成員的比較方式來執(zhí)行相等比較。兩個對象變量可以使用Equals方法來加以比較。Equals會判斷兩個變量是否指向相同的實例。


 


查看完整回答
反對 回復(fù) 2019-03-21
  • 3 回答
  • 0 關(guān)注
  • 548 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號