C#指南,重溫基礎,展望遠方!(3)類型和變數

來源:互聯網
上載者:User

標籤:支援   param   https   sam   ogr   元素   名稱   定義類   二維數組   

C# 有兩種類型:實值型別參考型別。 實值型別的變數直接包含資料,而參考型別的變數則儲存對資料(稱為“對象”)的引用。對於參考型別,兩個變數可以引用同一對象;因此,對一個變數執行的運算可能會影響另一個變數引用的對象。 對於實值型別,每個變數都有自己的資料副本;因此,對一個變數執行的運算不會影響另一個變數(ref 和 out 參數變數除外)。

C# 實值型別又細分為簡單類型枚舉類型結構類型可以為 null 的實值型別。 C# 參考型別又細分為類類型介面類型數群組類型委託類型

下面概述了 C# 的類型系統。

  • 實值型別
    • 簡單類型
      • 有符號的整型:sbyteshortintlong
      • 無符號的整型:byteushortuintulong
      • Unicode 字元:char
      • IEEE 浮點:floatdouble
      • 高精度小數:decimal
      • 布爾:bool
    • 枚舉類型
      • 格式為 enum E {...} 的使用者定義型別
    • 結構類型
      • 格式為 struct S {...} 的使用者定義型別
    • 可以為 null 的實值型別
      • 值為 null 的其他所有實值型別的擴充
  • 參考型別
    • 類類型
      • 其他所有類型的最終基類:object
      • Unicode 字串:string
      • 格式為 class C {...} 的使用者定義型別
    • 介面類型
      • 格式為 interface I {...} 的使用者定義型別
    • 數群組類型
      • 一維和多維,例如 int[] 和 int[,]
    • 委託類型
      • 格式為 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 類型表示引用包含特定參數列表和傳回型別的方法。 通過委託,可以將方法視為可分配給變數並可作為參數傳遞的實體。 委託類同於函數式語言提供的函數類型。 委託也類似於其他一些語言中的函數指標概念,但與函數指標不同的是,委託不僅物件導向,還型別安全。

classstructinterface 和 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 的實值型別
    • null 值或具有精確類型的值
  • object
    • null 引用、對任意參考型別的對象的引用,或對任意實值型別的裝箱值的引用
  • 類類型
    • null 引用、對類類型執行個體的引用,或對派生自類類型的類執行個體的引用
  • 介面類型
    • null 引用、對實現介面類型的類類型執行個體的引用,或對實現介面類型的實值型別的裝箱值的引用
  • 數群組類型
    • null 引用、對數群組類型執行個體的引用,或對相容的數群組類型執行個體的引用
  • 委託類型
    • null 引用或對相容的委託類型執行個體的引用

C#指南,重溫基礎,展望遠方!(3)類型和變數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.