真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c#結(jié)構(gòu)體與類的區(qū)別

結(jié)構(gòu)體和類的區(qū)別:
    在做一個項目時,使用了較多的結(jié)構(gòu)體,并且存在一些結(jié)構(gòu)體的嵌套,即某結(jié)構(gòu)體成員集合包含另一個結(jié)構(gòu)體等,總是出現(xiàn)一些奇怪的錯誤,才終于下決心好好分析一下到底類和結(jié)構(gòu)體有啥不同,雖然它們很相似,但確實有很大的不同,用不好難免出的問題會比較多,現(xiàn)總結(jié)一下:

一、結(jié)構(gòu)體和類非常相似:

1,定義和使用非常相似,例子如下:
public struct Student
{
    string Name;
    int Age;
}
public class Question
{
    int Number;
     string Content;
}
使用:
Student s=new Student();
Question q=new Question();
2,兩者都是container類型,這表示它們可以包含其他數(shù)據(jù)類型作為成員。

3,兩者都擁有成員,包括:構(gòu)造函數(shù)、方法、屬性、字段、常量、枚舉類型、事件、以及事件處理函數(shù)。

4,兩者的成員都有其各自的存取范圍。例如,可以將某一個成員聲明為Public,而將另一個成員聲明為Private。

5,兩者都可以實現(xiàn)接口。

6,兩者都可以公開一個默認(rèn)屬性,然而前提是這個屬性至少要取得一個自變量。

7,兩者都可以聲明和觸發(fā)事件,而且兩者都可以聲明委托(Delegate)。

二、結(jié)構(gòu)體和類的主要區(qū)別
在網(wǎng)上摘抄了兩段:

=====第一段:=====

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

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

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

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

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

6,結(jié)構(gòu)不能聲明默認(rèn)的構(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)聲明,不允許對包含的變量進(jìn)行初始化設(shè)定,類則可以在聲明類的實例時,同時進(jìn)行變量初始化。

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

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

12,結(jié)構(gòu)永遠(yuǎn)不會終止,因此CLR不會在任何結(jié)構(gòu)上調(diào)用Finalize方法。類則是由內(nèi)存回收進(jìn)程加以終止,當(dāng)內(nèi)存回收進(jìn)程檢測到?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)的所有成員初始化為其默認(rèn)值。不需要重新定義這個行為。

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

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

16,當(dāng)您將一個結(jié)構(gòu)變量賦值給另一個,或者將結(jié)構(gòu)實例傳遞到程序變量時,所有變量成員的值會復(fù)制到新的結(jié)構(gòu)中。當(dāng)您將一個對象變量賦值給另一個,或者將對象變量傳遞給程序時,則只是復(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會判斷兩個變量是否指向相同的實例。

=====第二段:=====

1,結(jié)構(gòu)體是一種值類型,而類是引用類型。值類型用于存儲數(shù)據(jù)的值,引用類型用于存儲對實際數(shù)據(jù)的引用。那么結(jié)構(gòu)體就是當(dāng)成值來使用的,類則通過引用來對實際數(shù)據(jù)操作。
2,結(jié)構(gòu)體的定義是:有些數(shù)據(jù)既是相互關(guān)聯(lián)的,又共同描述一個完整事物,如:一個學(xué)生的整體信息,學(xué)號、姓名、性別等。而類則使用在需要比較有層次的數(shù)據(jù)上面。
3,類是反映現(xiàn)實事物的一種抽象,而結(jié)構(gòu)體的作用只是一種包含了具體不同類別數(shù)據(jù)的一種包裝,結(jié)構(gòu)體不具備類的繼承多態(tài)特性 
4,構(gòu)造函數(shù)是為了初始化類的字段而存在的,而結(jié)構(gòu)體并不需要初始化就能使用,因此,結(jié)構(gòu)體中并不存在默認(rèn)的構(gòu)造函數(shù)。
結(jié)構(gòu):
沒有默認(rèn)的構(gòu)造函數(shù),但是可以添加構(gòu)造函數(shù)
    沒有析構(gòu)函數(shù)
    沒有 abstract 和 sealed(因為不能繼承)
    不能有protected 修飾符
    可以不使用new 初始化
在結(jié)構(gòu)中初始化實例字段是錯誤的
類: 
 有默認(rèn)的構(gòu)造函數(shù)
 有析構(gòu)函數(shù)
 可以使用 abstract 和 sealed 
有protected 修飾符
必須使用new 初始化

三.如何選擇結(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)時最佳的選擇 

成都創(chuàng)新互聯(lián)公司企業(yè)建站,十載網(wǎng)站建設(shè)經(jīng)驗,專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁設(shè)計,有多年建站和網(wǎng)站代運營經(jīng)驗,設(shè)計師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對于成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動的思維在網(wǎng)頁中充分展現(xiàn),通過對客戶行業(yè)精準(zhǔn)市場調(diào)研,為客戶提供的解決方案。


分享文章:c#結(jié)構(gòu)體與類的區(qū)別
URL標(biāo)題:http://weahome.cn/article/giedpp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部