十一 認識基元型別 FCL型別及與CLR的相容情況

2022-01-30 22:23:27 字數 2000 閱讀 6868

基元型別(primitive),簡單來說就是編譯器直接支援的資料型別。基元型別直接對映到framework類庫(fcl)中的型別,例如c#中乙個基元型別int直接對映到system.int32型別,如下**:

public

sealed

class

program

}public

sealed

class

program

}第一種宣告變數a時

int是基元,顏色

為藍色,說明它是c#語言中的關鍵字,第二種

system.

int32

是framework類庫(fcl)在存在的型別,顏色為綠色,但它們編譯生成的il**是完全相同的,如下所示:

//使用int宣告變數a時的il**

.method public hidebysig static void  main() cil managed

// end of method program::main

//使用

system.

int32

宣告變數a時的il**

.method public hidebysig static void  main() cil managed

// end of method program::main

為什麼會有完全一樣的il**呢,我們可以這樣想像,c#編譯器自動假定在所有源**檔案中新增了以下using指令:

using

myint32

= system.

int32

;//...等等一切基元型別

也就是加上了引用命名空間別名,所以就生成一完全一樣的il**,但我們平時使用時使用哪一種用法呢,jeffrey richter推薦我們使用fcl型別,原因如下:

(1)很多開發人員在考慮不知道使用

string

還是string

,object

還是object

,bool

還是boolean

,其實它們兩者都沒有區別,就是乙個準確對映到別乙個,都可以使用。

(2)在c#中,long對映到system.int64,但在一種不同的程式語言中,long可能是對映到int16或int32。

(3)fcl的許多方法都將型別名稱作為其方法名的一部分,例如,binaryreader提供的包括readerboolean,reader32,readersingle等,如下:

binaryreader

br = 

newbinaryreader

();float

val = br.readsingle();

//正確,但感覺不自然

single

val = br.readsingle();

//正確,可讀性強

下表為c#基元型別對應的fcl型別:

c#基元型別

fcl型別

cls相容

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

是object

system.object

是string

system.string

第5章 基元型別 引用型別與值型別 (2)

所有的值型別都繼承自system.valuetype,而system.valuetype繼承自system.object。它重寫了system.object中的equals方法和gethashcode方法。當定義自己的值型別時我們也應重寫equals方法和gethashcode方法,為它們提供乙個顯...

引用型別及與指標的比較(C 筆記)

引用是c 在c語言上延伸的一種新的機制,是對c語言中指標的功能的一種新的實現方式。引用型別 引用 是識別符號的別名,即變數的別名。在定義乙個引用時,必須同時對它初始化,使它指向乙個已存在的物件。int i 10 int ri i 定義int引用ri,並初始化為變數i的引用此時ri相當於變數i的另乙個...

認識C語言中自定義型別 結構體與記憶體對齊

1 結構體的宣告 使用關鍵字struct 定義 struct tag variable list 分號不能丟 在宣告的時候,可以不完全宣告,可以省略 tag 或者variable list 2 結構體自引用 struct node 3 結構體變數的定義和初始化 1 定義結構體變數 struct po...