.NET之美 第一部分C#語言基礎
阿新 • • 發佈:2017-09-12
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#語言基礎