国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

深入c# 類和結構的區別總結詳解

2020-01-24 03:16:05
字體:
來源:轉載
供稿:網友
類和結構的區別:
1.一個是引用類型一個是值類型
Class是引用類型,繼承自System.Object類
Struct是值類型,繼承自System.ValueType類,因此不具有多態性
因為結構是值類型,所以結構之間賦值可以創建新的結構,復制包含結構的變量時,講復制所有的數據,對新的副本所作的修改都不會改變舊副本的數據,而類是引用類型,類之間的賦值只是復制引用。
2. 繼承性的區別
Class支持繼承,可以繼承自類和接口,是完全可擴展的,除非聲明sealed。否則類可以繼承自其它的類的接口,自身也能被繼承。
Struct沒有繼承性,不能從另外一個結構或者類繼承,本身也不能被繼承,雖然結構沒有明確地用sealed聲明,但是結構師隱式的sealed。Struct支持接口繼承。
3.內部結構:
結構

沒有默認的(無參數)構造函數,但是可以添加構造函數,結構可以聲明構造函數,但是他們必須是帶參數的。
有默認的構造函數
沒有析構函數
有析構函數
沒有abstract和sealed(因為不能繼承)
可以使用abstract和sealed
不能有protected修飾符,不可以聲明protected,virtual,sealed和override成員
可以聲明protected,virtual,sealed,override成員
可以不使用new初始化
必須使用new初始化,struct在聲明時就進行了初始化過程,所有的成員變量均默認為0或null
在結構中初始化實例字段是錯誤的
Struct變量使用完之后就自動解除內存分配
Class實例有垃圾回收機制來保證內存的回收處理
Struct創建的對象復制簡單,直接以等號連接即可
Class對象復制分為淺復制和深復制,必須經過特別的方法來完成復制
我們可以簡單地理解為class是一個可以動的機器,有行為,有多臺,有繼承,而struct是一個零件箱,組合了不同結構的零件,其實class和struct最本質的區別在于class是引用類型,內存分配在托管堆,而struct是值類型,內存分配在線程堆棧上,此差異導致了上述的所有的不同。
4.如何選擇類和結構
(1)實現一個主要勇于存儲數據的結構時,可以考慮結構
(2)Struct變量占用堆棧的空間,因此適用于數據量相對小的場合,堆棧的空間有限,對于大量的邏輯的對象,創建類要比創建結構好一些。
(3)結構數組具有更高的效率
(4)結構表示如點,矩形和顏色這樣輕量的對象,例如,如果聲明一個含有1000個點的對象數組,則將為引用每個對象分配附加的內存,在此情況下,結構的成本較低。
(5)在表現抽象和多級別的對象層次時,類是最好的選擇
(6)在大多數情況下,該類型只是一些數據時,結構師最佳的選擇。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辽阳县| 乡宁县| 牟定县| 凤冈县| 久治县| 泰兴市| 阿瓦提县| 罗山县| 林芝县| 个旧市| 洛浦县| 同心县| 从化市| 如东县| 新源县| 洛宁县| 平定县| 汉源县| 武平县| 元谋县| 类乌齐县| 邢台市| 海丰县| 南木林县| 蒲城县| 峨眉山市| 抚远县| 溧水县| 博兴县| 宜黄县| 仙游县| 永康市| 凤冈县| 故城县| 印江| 鄂托克前旗| 五指山市| 商南县| 板桥市| 青神县| 贵定县|