天天看點

.NET之美 第一部分C#語言基礎

  CLR 支援兩種類型:值類型和引用類型,

.NET之美 第一部分C#語言基礎

  C#的所有值類型均隐式派生自System.ValueType:

結構體:struct(直接派生于System.ValueType);

數值類型:

整 型:sbyte(System.SByte的别名),short(System.Int16),int(System.Int32),long (System.Int64),byte(System.Byte),ushort(System.UInt16),uint (System.UInt32),ulong(System.UInt64),char(System.Char);

浮點型:float(System.Single),double(System.Double);

用于财務計算的高精度decimal型:decimal(System.Decimal)。

bool型:bool(System.Boolean的别名);

使用者定義的結構體(派生于System.ValueType)。

枚舉:enum(派生于System.Enum);

可空類型(派生于System.Nullable<T>泛型結構體,T?實際上是System.Nullable<T>的别名)。

  值類型(Value Type),值類型執行個體通常配置設定線上程的堆棧(stack)上,并且不包含任何指向執行個體資料的指針,因為變量本身就包含了其執行個體資料

  C#有以下一些引用類型:

數組(派生于System.Array)

使用者用定義的以下類型:

類:class(派生于System.Object);

接口:interface(接口不是一個“東西”,是以不存在派生于何處的問題。Anders在《C# Programming Language》中說,接口隻是表示一種約定[contract]);

委托:delegate(派生于System.Delegate)。

object(System.Object的别名);

字元串:string(System.String的别名)。

  可以看出:

引用類型與值類型相同的是,結構體也可以實作接口;

引用類型可以派生出新的類型,而值類型不能;

引用類型可以包含null值,值類型不能(可空類型功能允許将 null 賦給值類型);

引用類型變量的指派隻複制對對象的引用,而不複制對象本身。而将一個值類型變量賦給另一個值類型變量時,将複制包含的值

  簡單說明:在記憶體中,變量會被配置設定在棧上來進行操作。值類型存儲在棧上,而引用類型存儲在堆上,棧上的變量記錄該對象的位址

裝箱和拆箱

  裝箱:将一個值類型轉換成等價的引用類型。

  拆箱:将一個已經裝箱的引用類型轉為值類型。

  

未完待續...

參考:

http://www.cnblogs.com/siqing99/archive/2012/04/03/2430918.html