閱讀742 返回首頁    go 技術社區[雲棲]


C#的類型係統

一.C#的統一類型係統
1.C#的類型係統是統一的,java的類型係統分為:基本類型(原生類型)和類類型,而C#的所有類型直接或間接地從object類類型派生而來,從類型係統上來看比java更OO。
2.C#的類型分為三類:
(1)值類型,一個值類型或是結構類型或是枚舉類型
(2)引用類型
(3)指針類型
值類型與
引用類型的不同在於:值類型的變量直接包含其數據而引用類型的變量存儲對其數據的引用(reference)後者稱為對象(object)。對於引用類型兩個變量可能引用同一個對象因此對一個變量的操作可能影響另一個變量所引用的對象。對於值類型,每個變量都有自己的數據副本,對一個變量的操作不可能影響另一個變量。
二。值類型
1.所有值類型從類System.ValueType隱式繼承後者又從類object繼承。任何類型都不可能從值類型派生。

2.
所有值類型都隱式聲明一個稱為默認構造函數(default constructor)的公共無參數實例構造函數。默認構造函數返回一個零初始化實例它就是該值類型的默認值(default value)

·         對於所有simple-types默認值是將其所有位都置零的位模式所形成的值

o        對於sbytebyteshortushortintuintlongulong默認值為0

o        對於char默認值為'\x0000'

o        對於float默認值為0.0f

o        對於double默認值為0.0d

o        對於decimal默認值為0.0m

o        對於bool默認值為false

·         對於enum-typeE默認值為0

·         對於struct-type默認值是通過將所有值類型字段設置為它們的默認值、將所有引用類型字段設置為null而產生的值。

3.C#中有所謂的簡單類型概念(simple type),類似於java的基本類型,但又不同,C#的簡單類型本質上都是結構類型(預定義集合的結構類型),所以還是值類型,從System.ValueType繼承而來。C#的簡單類型包括:

保留字

化名的類型

sbyte

System.SByte

byte

System.Byte

short

System.Int16

ushort

System.UInt16

int

System.Int32

uint

System.UInt32

long

System.Int64

ulong

System.UInt64

char

System.Char

float

System.Single

double

System.Double

bool

System.Boolean

decimal

System.Decimal

這些簡單類型都是System命名空間中預定義結構類型的別名(ruby的別名實在貼心)

4.枚舉類型,枚舉類型是具有命名常量的獨特的類型。每個枚舉類型都有一個基礎類型,該基礎類型必須為 bytesbyteshortushortintuintlongulong。如果沒有為枚舉類型中的元素指定基礎值,默認是從0開始逐一遞增。

三。引用類型

1.引用類型是類類型、接口類型、數組類型或委托類型。

2.類類型:包括預定義的類類型和用戶通過class關鍵字的自定義類類型

3.對象類型:

object類類型是所有其他類型的最終基類。C#  中的每種類型都是直接或間接從object類類型派生的。

關鍵字object隻是預定義類System.Object的別名。

4.string類型:
string類型是直接從object繼承的密封類類型。關鍵字string隻是預定義類System.String的別名.
5.接口類型:
與java中的接口概念基本一致,可以變相實現多重繼承。

類類型

說明

System.Object

所有其他類型的最終基類。

System.String

C#  語言的字符串類型。

System.ValueType

所有值類型的基類。

System.Enum

所有枚舉類型的基類。

System.Array

所有數組類型的基類。

System.Delegate

所有委托類型的基類。

System.Exception

所有異常類型的基類。


四。裝箱、拆箱概念
1.裝箱和拆箱的概念是C#  的類型係統的核心。它在 value-typereference-type 之間的架起了一座橋梁,使得任何 value-type 的值都可以轉換為 object 類型的值,反過來轉換也可以。
2.裝箱:
裝箱轉換允許將value-type隱式轉換為reference-type
裝箱的行為可以用下麵的過程描述:

sealed class T_Box: System.ValueType
{
T value;

public T_Box(T t) {
     value = t;
}
}

分配一個對象實例然後將value-type的值複製到該實例中
3.拆箱:
拆箱轉換允許將reference-type顯式轉換為value-type
從對象boxvalue-typeT的拆箱轉換相當於執行表達式((T_Box)box).value
文章轉自莊周夢蝶  ,原文發布時間5.17

最後更新:2017-05-17 11:33:03

  上一篇:go  數據脫口秀 | 從小紮到蓋茨,哪位科技大佬最可能黑化為大反派?
  下一篇:go  智能哲學:在AI前沿上人類倫理學的挑戰與應戰