742
技術社區[雲棲]
C#的類型係統
一.C#的統一類型係統
1.C#的類型係統是統一的,java的類型係統分為:基本類型(原生類型)和類類型,而C#的所有類型直接或間接地從object類類型派生而來,從類型係統上來看比java更OO。 2.C#的類型分為三類: (1)值類型,一個值類型或是結構類型,或是枚舉類型 (2)引用類型 (3)指針類型 值類型與引用類型的不同在於:值類型的變量直接包含其數據,而引用類型的變量存儲對其數據的引用(reference),後者稱為對象(object)。對於引用類型,兩個變量可能引用同一個對象,因此對一個變量的操作可能影響另一個變量所引用的對象。對於值類型,每個變量都有自己的數據副本,對一個變量的操作不可能影響另一個變量。 二。值類型 1.所有值類型從類System.ValueType隱式繼承,後者又從類object繼承。任何類型都不可能從值類型派生。 2.所有值類型都隱式聲明一個稱為默認構造函數(default constructor)的公共無參數實例構造函數。默認構造函數返回一個零初始化實例,它就是該值類型的默認值(default value): ·        對於所有simple-types,默認值是將其所有位都置零的位模式所形成的值: o       對於sbyte、byte、short、ushort、int、uint、long和ulong,默認值為0。 o       對於char,默認值為'\x0000'。 o       對於float,默認值為0.0f。 o       對於double,默認值為0.0d。 o       對於decimal,默認值為0.0m。 o       對於bool,默認值為false。 ·        對於enum-typeE,默認值為0。 ·        對於struct-type,默認值是通過將所有值類型字段設置為它們的默認值、將所有引用類型字段設置為null而產生的值。 3.C#中有所謂的簡單類型概念(simple type),類似於java的基本類型,但又不同,C#的簡單類型本質上都是結構類型(預定義集合的結構類型),所以還是值類型,從System.ValueType繼承而來。C#的簡單類型包括:
這些簡單類型都是System命名空間中預定義結構類型的別名(ruby的別名實在貼心)
4.枚舉類型,枚舉類型是具有命名常量的獨特的類型。每個枚舉類型都有一個基礎類型,該基礎類型必須為 byte、sbyte、short、ushort、int、uint、long 或 ulong。如果沒有為枚舉類型中的元素指定基礎值,默認是從0開始逐一遞增。 三。引用類型 1.引用類型是類類型、接口類型、數組類型或委托類型。 2.類類型:包括預定義的類類型和用戶通過class關鍵字的自定義類類型 3.對象類型: object類類型是所有其他類型的最終基類。C# 中的每種類型都是直接或間接從object類類型派生的。
關鍵字object隻是預定義類System.Object的別名。 4.string類型:
string類型是直接從object繼承的密封類類型。關鍵字string隻是預定義類System.String的別名. 5.接口類型: 與java中的接口概念基本一致,可以變相實現多重繼承。
四。裝箱、拆箱概念 1.裝箱和拆箱的概念是C# 的類型係統的核心。它在 value-type 和 reference-type 之間的架起了一座橋梁,使得任何 value-type 的值都可以轉換為 object 類型的值,反過來轉換也可以。 2.裝箱:裝箱轉換允許將value-type隱式轉換為reference-type。 裝箱的行為可以用下麵的過程描述: sealed class T_Box: System.ValueType public T_Box(T t) {
分配一個對象實例,然後將value-type的值複製到該實例中
3.拆箱:拆箱轉換允許將reference-type顯式轉換為value-type。 從對象box到value-typeT的拆箱轉換相當於執行表達式((T_Box)box).value 文章轉自莊周夢蝶 ,原文發布時間5.17
|
最後更新:2017-05-17 11:33:03