1. 程式人生 > >.NET之美 第一部分C#語言基礎

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

ogr 引用 約定 另一個 single 指向 不包含 判等 program

第一章 類型基礎

1 值類型與引用類型

  CLR 支持兩種類型:值類型引用類型,

技術分享

  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 賦給值類型);
  • 引用類型變量的賦值只復制對對象的引用,而不復制對象本身。而將一個值類型變量賦給另一個值類型變量時,將復制包含的值

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

裝箱和拆箱

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

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

2 對象判等

  

未完待續...

參考:

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

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