編譯器直接支持的數據類型稱為基元類型。基元類型直接映射到Framework類庫(FCL)中存在的類型。比如在c#中int直接映射到曹衍濤 System.Int32類型. IL(IL可以指Intermediate Language,同MSIL(Microsoft Intermediate Langua ...
編譯器直接支持的數據類型稱為基元類型。基元類型直接映射到Framework類庫(FCL)中存在的類型。比如在c#中int直接映射到曹衍濤
System.Int32類型.
IL(IL可以指Intermediate Language,同MSIL(Microsoft Intermediate Language),是將.NET代碼轉化為機器語言的一個中間語言的縮寫)
CLS(common language Specification)公共語言規範
下為c#基元類型與對應FCL類型
c#基元類型 | FCL類型 | CLS相容 | 說明 |
sbyte | System.SByte | 否 | 有符號8位值 |
byte | System.Byte | 是 | 無符號8位值 |
short | System.Int16 | 是 | 有符號16位值 |
ushort | System.UInt16 | 否 | 無符號16位值 |
int | System.Int32 | 是 | 有符號32位值 |
uint | System.UInt32 | 否 | 無符號32位值 |
long | System.Int64 | 是 | 有符號64位值 |
ulong | System.UInt64 | 否 | 無符號64位值 |
char | System.Char | 是 | 16位Unicode字元 |
float | System.Single | 是 | IEEE32位浮點值 |
double | System.Double | 是 | IEEE64位浮點值 |
bool | System.Boolean | 是 | true/false |
decimal | System.Declmal | 是 | 128位高精度浮點值 |
string | System.String | 是 | 一個字元數組 |
object | System.Object | 是 | 所有類型的基類 |
dynamic | System.Object | 是 | 對於CLR,dynamic與objecty完全一致 |
編譯器能識別常見的編程模式,生成必要的IL,使代碼能像預期工作
c#編譯器支持與類型轉換、文本常量以及操作符有關的模式
如果轉換時安全的(不會丟失數據),c#允許進行隱式轉換,若不安全則要求顯示轉換。比如說Int32轉為Int64可以隱式轉換,反之需要顯示轉換。
除了轉型,基元類型還能寫成文本常量,文本常量可以被看作是類型本身的一個實例。
Console.WriteLine(123.ToString()+123.ToString());//"123123"
checked與unchecked類型操作
對基元類型執行的許多操作都可能造成溢出:
Byte b=100;
b=(Byte )(b+200);//byte取值範圍為-128~127
程式員可以在特定的區域用checked與unchecked控制溢出檢查
checked操作符
Byte b=100;
b=(Byte )checked(b+200);//不會拋出overflowexception異常
b=checked((Byte )(b+200));//會拋出overflowexception異常
除了chacked和unchecked操作符,c#還支持checked和unchecked語句,他們造成一個塊中所有的表達式都進行或者不進行溢出檢查。
checked{//開始一個checked模塊
Byte b=100;
b+=200;//該表達式會進行溢出檢查
}//結束一個checked模塊