標籤:支援 param https sam ogr 元素 名稱 定義類 二維數組
C# 有兩種類型:實值型別和參考型別。 實值型別的變數直接包含資料,而參考型別的變數則儲存對資料(稱為“對象”)的引用。對於參考型別,兩個變數可以引用同一對象;因此,對一個變數執行的運算可能會影響另一個變數引用的對象。 對於實值型別,每個變數都有自己的資料副本;因此,對一個變數執行的運算不會影響另一個變數(ref
和 out
參數變數除外)。
C# 實值型別又細分為簡單類型、枚舉類型、結構類型和可以為 null 的實值型別。 C# 參考型別又細分為類類型、介面類型、數群組類型和委託類型。
下面概述了 C# 的類型系統。
- 實值型別
- 簡單類型
- 有符號的整型:
sbyte
、short
、int
、long
- 無符號的整型:
byte
、ushort
、uint
、ulong
- Unicode 字元:
char
- IEEE 浮點:
float
、double
- 高精度小數:
decimal
- 布爾:
bool
- 枚舉類型
- 格式為
enum E {...}
的使用者定義型別
- 結構類型
- 格式為
struct S {...}
的使用者定義型別
- 可以為 null 的實值型別
- 參考型別
- 類類型
- 其他所有類型的最終基類:
object
- Unicode 字串:
string
- 格式為
class C {...}
的使用者定義型別
- 介面類型
- 格式為
interface I {...}
的使用者定義型別
- 數群組類型
- 委託類型
- 格式為
delegate int D(...)
的使用者定義型別
八個整數型別支援帶符號或不帶符號格式的 8 位、16 位、32 位和 64 位元值。
兩個浮點類型(float
和 double
)分別使用 32 位單精確度和 64 位元雙精確度 IEC-60559 格式表示。
decimal
類型是適用於財務和貨幣計算的 128 位元據類型。
C# 的 bool
類型用於表示布爾值(true
或 false
)。
C# 使用 Unicode 編碼處理字元和字串。 char
類型表示 UTF-16 代碼單元,string
類型表示一系列 UTF-16 代碼單元。
下面總結了 C# 的數實值型別。
- 有符號的整型
sbyte
:8 位,介於 -128 到 127 之間
short
:16 位,介於 -32,768 到 32,767 之間
int
:32 位,介於 -2,147,483,648 到 2,147,483,647 之間
long
:64 位元,介於 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 之間
- 無符號的整型
byte
:8 位,介於 0 到 255 之間
ushort
:16 位,介於 0 到 65,535 之間
uint
:32 位,介於 0 到 4,294,967,295 之間
ulong
:64 位元,介於 0 到 18,446,744,073,709,551,615 之間
- 浮點
float
:32 位,介於 1.5 × 10-45 到 3.4 × 1038 之間,7 位精度
double
:64 位元,介於 5.0 × 10-324 到 1.7 × 10308 之間,15 位精度
- Decimal
decimal
:128 位,至少介於 -7.9 × 10-28 到 7.9 × 1028 之間,至少為 28 位精度
C# 程式使用型別宣告建立新類型。 型別宣告指定新類型的名稱和成員。 使用者可定義以下五種 C# 類型:類類型、結構類型、介面類型、枚舉類型和委託類型。
class
類型定義包含資料成員(欄位)和函數成員(方法、屬性及其他)的資料結構。 類類型支援單一繼承和多型,即衍生類別可以擴充和專門針對基類的機制。
struct
類型定義包含資料成員和函數成員的結構,這一點與類類型相似。 不過,與類不同的是,結構是實值型別,通常不需要進行堆分配。 結構類型不支援使用者指定的繼承,並且所有結構類型均隱式繼承自類型 object
。
interface
類型將協定定義為一組已命名的公用函數成員。 實現 interface
的 class
或 struct
必須提供介面函數成員的實現代碼。 interface
可以繼承自多個基底介面,class
和 struct
可以實現多個介面。
delegate
類型表示引用包含特定參數列表和傳回型別的方法。 通過委託,可以將方法視為可分配給變數並可作為參數傳遞的實體。 委託類同於函數式語言提供的函數類型。 委託也類似於其他一些語言中的函數指標概念,但與函數指標不同的是,委託不僅物件導向,還型別安全。
class
、struct
、interface
和 delegate
類型全部都支援泛型,因此可以使用其他類型對它們進行參數化。
enum
類型是一種包含已命名常量的獨特類型。 每個 enum
類型都有一個基礎類型(必須是八種整數型別之一)。 enum
類型的值集與基礎類型的值集相同。
C# 支援任意類型的一維和多維陣列。 與上述類型不同,數群組類型無需先聲明即可使用。 相反,數群組類型是通過在類型名稱後面添加方括弧構造而成。 例如,int[]
是 int
類型的一維數組,int[,]
是 int
類型的二維數組,int[][]
是由 int
類型的一維數組構成的一維數組。
可以為 null 的實值型別也無需先聲明即可使用。 對於所有不可以為 null 的實值型別 T
,都有對應的可以為 null 的實值型別 T?
,後者可以包含附加值 null
。 例如,int?
是可以包含任何 32 位整數或值 null
的類型。
C# 採用統一的類型系統,因此任意類型的值都可視為 object
。 每種 C# 類型都直接或間接地派生自 object
類類型,而 object
是所有類型的最終基類。 只需將值視為類型 object
,即可將參考型別的值視為對象。 通過執行裝箱和unboxing操作,可以將實值型別的值視為對象。 在以下樣本中,int
值被轉換成 object
,然後又恢複成 int
。
C#複製
using System;class BoxingExample{ static void Main() { int i = 123; object o = i; // Boxing int j = (int)o; // Unboxing }}
當實值型別的值轉換成 object
類型時,將分配 object
執行個體(亦稱為“箱”)來包含值,然後該值會複製到相應的箱中。 相反,當 object
引用被顯式轉換成實值型別時,將檢查引用的 object
是否是具有正確實值型別的箱;如果檢查成功,則會將箱中的值複製出來。
C# 的統一類型系統實際上意味著可以“按需”將實值型別轉換成對象。 鑒於這種統一性,使用類型 object
的常規用途庫可以與參考型別和實值型別結合使用。
C# 有多種變數,其中包括欄位、數組元素、局部變數和參數。 變數表示儲存位置,每個變數都具有一種類型,用於確定可以在變數中儲存哪些值,如下文所述。
- 不可以為 null 的實值型別
- 可以為 null 的實值型別
- object
null
引用、對任意參考型別的對象的引用,或對任意實值型別的裝箱值的引用
- 類類型
null
引用、對類類型執行個體的引用,或對派生自類類型的類執行個體的引用
- 介面類型
null
引用、對實現介面類型的類類型執行個體的引用,或對實現介面類型的實值型別的裝箱值的引用
- 數群組類型
null
引用、對數群組類型執行個體的引用,或對相容的數群組類型執行個體的引用
- 委託類型
C#指南,重溫基礎,展望遠方!(3)類型和變數