C#數據類型


  根據在內存中存儲位置的不同,C#的數據類型分為兩種

  1.值類型:該類型的數據長度固定,存放於堆棧(stack)上。

   2.引用類型:該類型的數據長度可變,存放於堆(Heap)上。

 

  一. C#的值類型

       類   別                             說   明  
       簡單類型 有有符號整型,無符號整型,Unicode字符型,實數型,布爾型
       枚舉類型 enum E{...}形式的用戶定義類型
       結構類型 struct S{...}形式的用戶定義類型
       可控類型 具有null值的值類型擴展,如int? 表示可為null的int類型

 下面介紹每種值類型的特點

  1.簡單類型

     簡單類型是C#預置的數據類型,具有如下特性:首先,他們都是 .NET系統類型的別名;其次,由簡單類型組成的常量表達式僅在編譯時而不是運行時受檢測;最后,簡單類型可以直接被初始化。

  (1)整數類型

         數學上的整數可以從負無窮到正無窮,但是計算機的存儲單位是有限的,所以計算機語言提供的整數類型的值總是一定范圍之內的。C#有八種數據類型:短字節型(sbyte),字節型(byte),短整型(stort),無符號短整型(ustort),整型(int),無符號整型(unit),長整型(long),無符號長整型(ulong)。

  (2)字符類型

         除了數字,計算機處理的信息還包括字符。字符主要包括數字字符,英文字符,表達式字符等,C#提供的字符類按照國際上公認的標准,采用Unicode字符集。字符型書數據占用兩個字節的內存,可以用來存儲Unicode字符集當中的一個字符(注意,只是一個字符,不是一個字符串)。

  (3)實數類型

        C#有三種實數類型:float(單精度型),doudle(雙精度型),decimal(十進制小數型)。

  (4)布爾類型

         布爾類型是用來表示“真”和“假”兩個概念的,在C#里用true和false來表示。

   2. 枚舉類型

       枚舉(enum)實際上是為一組在邏輯上密不可分的整數值提供便於記憶的符號。

       例如:定義顏色的枚舉,一年四季的枚舉

   3.結構類型

       利用簡單數據類型,可以進行一些常規數據運算,文字處理。但是在日常生活中,經常會碰到一些更復雜的數據類型,比如學生學籍記錄中可以包含學生姓名,年齡,籍貫,科家庭住址等信息。如果要用簡單類型來管理的話,每一條記錄都要放到三個不同的變量當中,工作量大,還不夠直觀。

      所以C#就定義了一種數據類型,它將一系列相關的變量組織為一個實體,該類型稱為結構(struct),每個變量成為結構的成員。

   4.可空類型

         可空(Nullable)類型也是值類型,只是它是包含null的值類型。簡而言之,可控類型可以表示所有基礎類型的值加上null。因此聲明一個可空的布爾類型變量(System.Boolean),就可以從集合{true,false,null}中進行賦值。

        為了定義一個可空的變量類型,在底層數據類型中添加問號(?)最為后綴。在C#中,System.Nullable<T>類型提供了一組所有可空類型都可以使用的成員,?后綴記法實際上是創建一個泛型System.Nullable<T>結構類型實例的簡寫。一非空變量一樣,局部可控變量必須賦一個初始值。

       例如:    int ? nullableInt =1;

                     double ? nullableDouble = 5.67;

        這樣的語法只對值類型是合法的。如果視圖創建一個可空引用類型(包括字符串),就會遇到編譯時錯誤。

         例如:   string ? s = "string";

 

    二. C#引用類型

    

       類   別                           說   明  
        類類型
Object,string,自定義類型
       接口類型
Interface I {...}形式的用戶定義類型
       數組類型
一維和多維數組
       委托類型
Delegate int D {...}形式的用戶定義類型

  下面介紹每種值類型的特點

   1. 類類型

       類是面向對象編程的基本單位,是對一組同類對象的抽象描述。類是一種包含數據成員,函數成員,和嵌套類型的數據結構。類的數據成員包括常量,域和事件,函數成員包括方法,屬性,索引指示器,運算器,構造函數和析構函數。

      類和結構都包含了自己的成員,但他們之間最主要的區別在於:類是引用類型,而結構是值類型。另外類支持繼承機制而結構不支持。通過繼承,派生類可以擴展基類的數據成員和函數方法,進而達到代碼的重用和設計重用的目的。因此類一般用於定義復雜實體,結構主要用於定義小型數據結構。

   (1)Obiect類型

             在C#的統一系統中,所有類型(預定義類型,用戶定義類型,引用類型和值類型)都是直接或間接從類System.Object繼承的。

             由於Object類型是所有其他類型的基類,可以將任何類型的賦給Object類型的變量。

    (2)String類型

            C#定義了一個基本的類string,專門用於對字符串的操作。.NET對string類型變量提供了獨特的管理方式,與別的引用類型不同,不需要使用new關鍵字就能聲明string類型的變量,因此string類型被看成是一個“獨特”的引用類型

    (3)用戶自定義類型

            C#程序員除了使用.NET Framework類庫中系統自定義類以外,還可以使用class關鍵字自定義類型。

     2.接口類型

     C#不支持類的多重繼承(指一個1子類可以有一個以上的直接父類,該子類可以繼承他直接的父類成員),但是客觀世界出現多重繼承的情況又比較多。為了避免傳統的多重繼承給程序帶來的復雜性等問題,C#提出了接口的概 念,通過接口可以實現多重繼承的功能。

       接口在語法上和抽象類(Abstract Class)相似,它定義了若干個抽象方法,屬性,索引,事件,形成一個抽象成員的集合,每個成員通常反應事物嗎某方面的功能。

       程序中接口的用處主要體現在下面幾個方面:

                    * 通過接口可以實現不相關類的相同行為,而不需要考慮這些類之間的層次關系。

                    * 通過接口可以指明多個類需要實現的方法。

                    * 通過接口可以了解對象的交互界面,而不需要了解對象所對應的類。

      定義接口使用interface關鍵字,在接口中可以有0至多個成員。一個接口必須是抽象的方法,屬性,事件或索引,這些抽象成員都沒有實現體,並且所有接口成員隱含的都是公共訪問性。

      一個接口不能包含常數,域,操作符,構造函數,靜態構造函數或嵌套類型,也不能包括任何類型的靜態成員。接口本身可以帶修飾符,如public,internal,但是接口成員聲明中不能使用除new外的任何修飾符。

      按照編碼慣例,接口的名字都以大寫字母I開始。

      接口把方法的定義和對它的實現區分開來,一個類可以實現多個接口來達到類似於“多重繼承”的目的。接口的繼承關系用冒號(:)表示,如果有多個基接口,則用逗號分開。

     3.數組類型

       數組(Array)是一種常用的引用數據類型,從字面上理解數組的概念,可以解釋為“一組數”,“一組元素”,數組中的元素是通過下標索引來進行訪問或修改。不同的下標表示數組中不同的元素,配合  數組的名字就可以訪問數組中的所有元素。

      數組的下表是從零開始的,數組的長度定義為數組中包含元素的個數。

      數組中的”秩“也稱數組的維數,用來確定和每個數組元素關聯的索引個數,數組最多可以有32個維數。“秩”為1的數組成為一維數組。“秩”大於1的數組成為多維數組。

     4.委托類型

       委托是用來處理其他語言(如C++,Pascal和Modula)需要用函數指針來處理的情況的。不過去C++函數指針不同,委托是完全面向對象的和類型安全的。

         委托聲明定義一個從System.Delegate類派生的類,在聲明委托類型時,只需要指定委托指向的原型的類型,它不能有返回值,也不能帶有輸出類型的參數

         委托實例封裝了一個調用列表,該列表列出了一個或多個方法,每個方法都稱為一個可調用體,對於實例方法,可調用實體有該方法和一個相關連的實例組成。對於靜態方法,可調用實體僅由一個方法組成。用一個適當的參    數集來調用一個委托實例,就是用此給定的參數集來調用該委托類型實例的每個科調用實體。

    

     

 

 

 

 

 

 

            

 

 

 

 

 

 

 

 

 


免責聲明!

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



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