C# 基本數據類型


Ø  前言

每個編程語言都有基本的數據類型,例如 CC++JavaPythonPHPJavaScript、以及各種數據庫等,而 C# 也不例外。本篇主要討論 C# 中的一些常用的基礎數據類型。

 

1.   值類型

Ø  值類型隱式繼承於 System.ValueType,而 System.ValueType 隱式繼承於 System.Object。在程序運行時,值類型的數據存儲在內存棧中。下面列出 C# 中的值類型:

 

1)   bool, System.Boolean 類型,它用於聲明變量來存儲布爾值 true false

 

2)   sbyte, System.SByte 類型,最小值為-128,最大值為127,可顯示轉換為 intlongdoublefloatdecimal 類型。

 

3)   byte, System.Byte 類型,最小值為0,最大值為255,可顯示轉換為 intlongdoublefloatdecimal 類型。

 

4)   short, System.Int16 類型,最小值為-32768,最大值為32767,可顯示轉換為 intlongdoublefloatdecimal 類型。

 

5)   ushort, System.UInt16 類型,最小值為0,最大值為65535,可顯示轉換為 intlongdoubledecimalfloat 類型。

 

6)   int, System.Int32 類型,最小值為-2147483648,最大值為2147483647;可顯示轉換為 longdoubledecimalfloat 類型。

 

7)   uint, System.UInt32 類型,最小值為0,最大值為4294967295,聲明 uint 類型變量使用后綴 uU,可顯示轉換為 longdoubledecimalfloat 類型。

 

8)   long, System.Int64 類型,最小值為-9223372036854775808,最大值為9223372036854775807L,聲明 long 類型變量使用后綴 lL,可顯示轉換為 doubledecimalfloat 類型。

 

9)   ulong, System.UInt64 類型的最小值為0,最大值為18446744073709551615,聲明 long 類型變量使用后綴 ulUL,可顯示轉轉為 doubledecimalfloat 類型。

 

10)  float, System.Singe 類型,最小值為-3.4 × 1038,最大值為+3.4 × 1038,表示存儲32位浮點值的簡單類型,聲明 float 類型變量使用后綴 fF,可顯示轉換為 double 類型,轉為 intlongdecimal 類型,需隱式轉換。

 

11)  double, System.Double 類型,最小值為±5.0 × 10324,最大值為±1.7 × 10308,表示存儲64位浮點值的簡單類型,聲明 double 類型變量使用后綴 dD;換為 intlongfloatdecimal 類型,需隱式轉換。

 

12)  decimal, System.Decimal 類型的大致范圍(-7.9 x 1028 - 7.9 x 1028) / (100 - 28),表示128位數據類型,同浮點型相比,decimal 類型具有更高的精度和更小的范圍,這使它適合於財務和貨幣計算,聲明 decimal 類型變量使用后綴 mM,轉為 intlongdoublefloat 類型,需隱式轉換。

 

13)  char, System.Char 類型范圍(U+0000 U+FFFF),用於聲明 .NET framework 使用Unicode字符表示 System.Char 結構的實例;可顯示轉換為 shortintlongfloatdoubledecimal 類型。轉為 string 類型,需使用 ToString() 方法。

 

14)  enum, System.Enum 類型,一種由一組稱為枚舉數列表的命名常量組成的獨特類型。

 

15)  struct 類型,通常用來封裝小型相關變量組,例如:矩形的坐標或庫存商品的特征。

 

2.   引用類型

Ø  引用類型的變量存儲對實際數據的引用。

Ø  申明引用類型關鍵字:classinterfacedelegate

Ø  內置引用類型:dynamyicobjectstring

1)   class

2)   委托

1.   創建委托實例的三種方式

1)   使用相同簽名的方法創建。

2)   使用匿名方法創建。

3)   使用lambda表達式創建。

3)   dynamic

1)   dynamicobject的區別

1.   dynamic與其它類型之間賦值不需要拆箱和裝箱,而object需要拆箱和裝箱。

4)   接口

1)   接口只能包含方法、屬性、事件和索引器。

5)   object

1)   C# 的統一類型系統中,所有類型(預定義類型、用戶定義類型、引用類型和值類型)都是直接或間接從 Object 繼承的。 可以將任何類型的值賦給 object 類型的變量。將值類型的變量轉換為對象的過程稱為“裝箱”。 將對象類型的變量轉換為值類型的過程稱為“取消裝箱”。

6)   string

1)   string 類型表示一個字符序列(零個或更多 Unicode 字符)string .NET Framework String 的別名。盡管 string 是引用類型,但定義相等運算符(== !=)是為了比較 string 對象(而不是引用)的值。

 

3.   數組

1)   數組可以是一維多維交錯的。

 

2)   數組類型是從抽象基類型 Array 派生的引用類型。由於此類型實現了 IEnumerable IEnumerable<T>,因此可以對 C# 中的所有數組使用 foreach 迭代。

 

3)   總結:多維數組與交錯數組的區別在於,多位數組中相同等級的數組元素大小必須一致;而交錯數組可以不相同。

1)   一維數組

1.   屬性

1)   Rank 獲取 System.Array 的秩(維數)。

2.   方法

1)   GetLength() 獲取一個 32 位整數,該整數表示 System.Array 的指定維中的元素數。

2)   Reverse() 反轉序列中元素的順序。

2)   多維數組

3)   交錯數組

1.   交錯數組是元素為數組的數組,交錯數組元素的維度和大小可以不同,交錯數組有時稱為“數組的數組”。以下示例說明如何聲明、初始化和訪問交錯數組。

 

4.  

1)   類是一種“引用類型”,創建類的對象時,對象賦值到的變量只保存對該內存的引用。將對象引用賦給新變量時,新變量引用的是原始對象。通過一個變量做出的更改將反映在另一個變量中,因為兩者引用同一數據。

 

2)   類(而非結構)支持繼承的概念。派生自另一個類(“基類”)的類將自動包含基類除構造函數和析構函數之外的所有公共、受保護和內部成員。

 

3)   可以將類聲明為抽象類,表示該類的一個或多個方法不具有實現。抽象類雖然無法直接實例化,但可以用作其他類的基類,由其他類提供缺少的實現。還可以將類聲明為密封類,以禁止其他類從該類繼承。

 

4)   可以將類(不是結構)聲明為靜態。靜態類只能包含靜態成員,不能使用 new 關鍵字進行實例化。在程序加載時,靜態類的一個副本將加載到內存中,可通過類名稱訪問該類的成員。類和結構都可以包含靜態成員。

 

5)   可以在一個代碼文件中定義類、結構或方法的一部分,而在另一個代碼文件中定義另一部分。

 

5.   結構

1)   結構是一種值類型。創建結構時,結構賦值到的變量保存該結構的實際數據。將結構賦給新變量時,將復制該結構。因此,新變量和原始變量包含同一數據的兩個不同的副本。對一個副本的更改不影響另一個副本。

 

2)   在結構聲明中,除非字段被聲明為 const static,否則無法初始化。

 

3)   結構不能聲明默認構造函數(沒有參數的構造函數)或析構函數。

 

4)   結構在賦值時進行復制。將結構賦值給新變量時,將復制所有數據,並且對新副本所做的任何修改不會更改原始副本的數據。在使用值類型的集合(如 Dictionary<string, myStruct>)時,請務必記住這一點。

 

5)   結構是值類型,而類是引用類型。

 

6)   與類不同,結構的實例化可以不使用 new 運算符。

 

7)   結構可以聲明帶參數的構造函數。

 

8)   一個結構不能從另一個結構或類繼承,而且不能作為一個類的基。所有結構都直接繼承自 System.ValueType,后者繼承自 System.Object

 

9)   結構可以實現接口。

 

10)  結構可用作可以為 null 的類型,因而可向其賦 null 值。

 

11)  如果使用 new 運算符創建結構對象,則會創建該結構對象,並調用適當的構造函數。與類不同,結構的實例化可以不使用 new運算符。在此情況下不存在構造函數調用,因而可以提高分配效率。但是,在初始化所有字段之前,字段將保持未賦值狀態且對象不可用。

 

6.   其他

1.   voidvoid .NET Framework System.Void 類型的別名。

 

2.   var:從 Visual C# 3.0 開始,在方法范圍中聲明的變量可以具有隱式類型 var。隱式類型的本地變量是強類型變量(就好像您已經聲明該類型一樣),但由編譯器確定類型。

 

3.   派生類可以通過將重寫聲明為sealed 來停止虛擬繼承。這需要在類成員聲明中的 override 關鍵字前面添加 sealed 關鍵字。

 

4.   out 關鍵字,按地址傳遞參數,參數傳遞前不需要賦值,在方法中使用前必須初始化,只出不進

 

5.   ref 關鍵字,按地址傳遞參數,參數傳遞前必須賦值,在方法中使用前不需要初始化,有進有出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM