天天看點

值類型和引用類型和資料大小排名

在2.2.1我們對C#的基本資料類型有了基本了解。C#将資料類型分為:值類型、引用類型和指針類型。

通用類型系統支援兩種一般類别的類型,每一類都細分成子類别:

q 值類型:值類型直接包含它們的資料,值類型的執行個體要麼在堆棧上,要麼内聯在結構中。值類型可以是内聯的(由運作庫實作)、使用者定義的或枚舉的。有關内聯值類型的清單,請參見 .NET Framework 類庫。

q 引用類型:引用類型存儲對值的記憶體位址的引用,位于堆上。引用類型可以是自描述類型、指針類型或接口類型。引用類型的類型可以由自描述類型的值來确定。自描述類型進一步細分成數組和類類型。類類型是使用者定義的類、裝箱的值類型和委托。

以下表格就是對通用類型系統的一個分類彙總

資料類型分類表及關鍵字

值類型

枚舉

Enum

内置類型

結構

整數:sbyte、byte、char、short、ushort、int、uint、long、ulong

浮點:float、double

高精度:decimal

布爾:bool

無類型:void

引用

類型

根對象:object

字元串:string

類:class

委托:delegate

接口:interface

數組:Array

指針類

表:資料類型分類表及關鍵字

大多數程式設計語言提供内置的資料類型(比如整數和浮點數),這些資料類型會在作為參數傳遞時被複制(即,它們通過值來傳遞)。在 .NET Framework 中,這些稱為值類型。運作庫支援兩種值類型:

q 内置值類型:.NET Framework 定義了内置值類型(例如int、float、double、bool等),它們對應于程式設計語言使用的基中繼資料類型并與之相同。

q 使用者定義的值類型:派生自 System.ValueType 或 System..Enum 的您自己的值類型。

引用類型的變量又稱為對象,可存儲對實際資料的引用。引用類型變量的指派隻複制對對象的引用,而不複制對象本身。基于值類型的變量直接包含值。将一個值類型變量賦給另一個值類型變量時,将複制包含的值。這與引用類型變量的指派不同,引用類型變量的指派隻複制對對象的引用,而不複制對象本身。所有的簡單類型(C# 語言的組成部分)均為 .NET Framework 系統類型的别名。例如,int 是 System.Int32 的别名。

static void Main(string[] args)  

{        

    System.Console.WriteLine("byte:{0}<--->{1}", byte.MinValue, byte.MaxValue); //0 .. 255                                                          

    System.Console.WriteLine("sbyte:{0}<--->{1}", sbyte.MinValue, sbyte.MaxValue); //-128 .. 127                                                        

    System.Console.WriteLine("short:{0}<--->{1}", short.MinValue, short.MaxValue);  //-32,768 .. 32,767                                                     

    System.Console.WriteLine("ushort:{0}<--->{1}", ushort.MinValue, ushort.MaxValue);//0 .. 65,535                                                          

    System.Console.WriteLine("int:{0}<--->{1}", int.MinValue, int.MaxValue);//-2,147,483,648 .. 2,147,483,647                                               

    System.Console.WriteLine("uint:{0}<--->{1}", uint.MinValue, uint.MaxValue); //0 .. 4,294,967,295                                                        

    System.Console.WriteLine("long:{0}<--->{1}", long.MinValue, long.MaxValue); //9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807                    

    System.Console.WriteLine("ulong:{0}<--->{1}", ulong.MinValue, ulong.MaxValue); //0 .. 18,446,744,073,709,551,615                                        

    System.Console.WriteLine("float:{0}<--->{1}", float.MinValue, float.MaxValue);//-3.402823e38 .. 3.402823e38                                             

    System.Console.WriteLine("double:{0}<--->{1}", double.MinValue, double.MaxValue); //-1.79769313486232e308 .. 1.79769313486232e308                       

    System.Console.WriteLine("decimal:{0}<--->{1}", decimal.MinValue, decimal.MaxValue);//-79228162514264337593543950335 .. 79228162514264337593543950335  

}  

C#提供了多種數值類型的資料:整型、浮點和高精度。提供這些不同的資料類型的原因是,不同的資料類型的容量是預定的。你可以把資料類型想象為一個個不同規格的盒子,每種規格的盒子的容量都是有限的。可以使用以下代碼觀察到不同資料類型的容量:

在聲明數值類型變量的時候,你需要估算下,你需要的最大、最小數值分别是多少,正确的選擇資料類型。無符号的資料類型在通常情況下我們不去使用,如果你需要存儲的資料是整型,筆者建議你優先考慮使用int,如果你需要存儲的是浮點類型,筆者建議你優先考慮使用double。

本文轉自shyleoking 51CTO部落格,原文連結:http://blog.51cto.com/shyleoking/805191

繼續閱讀