C#物件導向程式設計(二){識別字、保留字與型別}

識別字(Identifier) 就相當於真實世界每個人的身分證號,程式設計時用這些識別字來呼叫該物件對象,所以我們必須為每一個變數、常數及函式命名,這些名稱稱為程式語言的識別字。命名的規則上一篇已經有提到,現在再來詳細介紹一下識別字與型別。
c#所謂的識別字,通常是有特別意義而存在,所以程式設計人員不可再重複定義該字串。而每套程式語言的關鍵字(保留字)就是系統預先定義好的識別字。例如:前面提到的int 或者  string,程式設計者需要依照用途使用,以下是C#語言常用的的保留字。

  • 資料型別
    又分為實值型別參考型別指標型別
    A.實值型別 (Value Type) 的變數用來儲存資料。
    主要包含兩大類:
    struct (結構)、enum (列舉)。


    而這兩大類中可以包含的資料又有三類:
    Numeric (數字型別)、Boolean (布林值)、自定義結構。
    數字型別是成員最多的一種,又分為…
    整數:

    型別 範圍 大小
    sbyte -128 至 127 帶正負號的 8 位元整數
    byte 0 至 255 不帶正負號的 8 位元整數
    char U+0000 至 U+ffff Unicode 16 位元字元
    short -32,768 至 32,767 帶正負號的 16 位元整數
    ushort 0 至 65,535 不帶正負號的 16 位元整數
    int -2,147,483,648 至 2,147,483,647 帶正負號的 32 位元整數
    uint 0 至 4,294,967,295 不帶正負號的 32 位元整數
    long -9,223,372,036,854,775,808 至 9,223,372,036,854,775,807 帶正負號的 64 位元整數
    ulong 0 至 18,446,744,073,709,551,615 不帶正負號的 64 位元整數

    浮點數(帶有小數):

    型別 大概範圍 精確度
    float ±1.5e-45 至 ±3.4e38 7 位數
    double ±5.0e-324 至 ±1.7e308 15-16 位數

    Decimal(高精確十進位數):

    類型 大概範圍 精確度
    decimal (-7.9 x 1028 至 7.9 x 1028) / (100 至 28) 28-29 個有效數字

    布林:
    一般來說bool 只有兩種情況 truefalse (真、假 ,是、否),bool? 則可以帶有 null


    B.參考型別 (Reference Type) 的變數儲存實際資料的參考(物件)。
    類別:
    class 可以包含下列成員的宣告︰
    建構函式、常數、欄位、完成項、方法、屬性、索引子、運算子、事件、委派、類別、介面、結構。
    直接宣告或巢狀的 class 可存取權限是 public、 protected internal、protected、internal 或 private。 成員預設為 private。
    在命名空間宣告的 class 可存取權限是 public 或 internal。 預設為 internal。
    而繼承的規則僅允許繼承一個類別,但可以繼承多個介面

    繼承 範例
    class ClassA { }
    class ClassB : BaseClass { }
    無,實作一個介面 class ClassC : IFace1{ }
    有,實作三個介面 class ClassD : BaseClass, IFace1 , IFace2 , IFace3 { }

    介面:
    interface 只可以包含方法、屬性、事件或索引子。實作介面的類別或結構必須實作介面定義中的介面成員。

    委派:
    delegate 的宣告類似方法的格式,可以有傳回值或者任意類型之任何數目的參數引數。委派是事件的基礎可用來封裝具名或匿名方法的參考型別。

    物件:
    object 型別在 .NET Framework 中是 Object 的別名。 在 C# 的型別系統中所有類型都會直接或間接繼承自 Object

    字串:
    string 在 .NET Framework 中是 String 的別名。string 類型代表零或多個 Unicode 字元序列。

    空虛:
    void 作為方法的傳回型別時,其可指定方法不要傳回值。

     


    動態:(UNITY不建議)

    dynamic 型別可讓它發生所在的作業略過編譯時期型別檢查,延後到執行階段才解析辦別。

    隱含型別:(UNITY不建議)
    var 從 Visual C# 3.0 開始,在變數可使用隱含型別,由編譯器 (Compiler) 判斷型別。

    C.指標型別 (Pointer Type) 只能用於 unsafe 模式。(不建議使用)
    unsafe 狀態只能在非安全的程式區塊中用於明確的記憶體操作,而有非常多的平台或是網路串流是不支援的;類型有可能是指標類型、實值類型或參考類型。 指標類型宣告會使用下列其中一種格式:
    sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal 或 bool。
    任何 enum 型別。任何指標類型。任何只包含 Unmanaged 類型欄位的使用者定義結構類型。

    宣告多個指標時,星號 (*) 只會與基礎類型一起出現,而不會做為每個指標名稱的前置詞使用。

    指標無法指向參考或包含參考的 struct,因為即使指標指向物件參考,依然可以對物件參考進行記憶體回收。 記憶體回收行程不會持續追蹤是否有任何指標類型指向物件。

    myType* 類型的指標變數值是  myType 類型變數的位址。 以下是指標類型宣告的範例:

    範例 說明
    int* p p 為整數的指標。
    int** p p 為整數指標的指標。
    int*[] p p 為整數的一維陣列指標。
    char* p p 為字元的指標。
    void* p p 為未知類型的指標。

     

  • 預設值參考表
    實值型別 預設值
    bool false
    byte 0
    char ‘\0’
    decimal 0.0M
    double 0.0D
    enum 由運算式 (E)0 所產生的值,而 E 是列舉識別項
    float 0.0F
    int 0
    long 0L
    sbyte 0
    short 0
    struct 這個值是由將所有實值型別欄位設定為其預設值,且所有參考型別欄位設定為  null 所產生
    uint 0
    ulong 0
    ushort 0

    註:C# 不允許使用未初始化的變數。UNITY則OK。

Leave a Reply