类型
C#语言的数据类型主要分为两类:
值类型和引用类型。
值类型又分为简单类型,结构(struct)和枚举(enum).
简单类型还可以细分为数值类型和布尔(bool)类型. C#语言中布尔类型严格地与数值类型区分,只有true和false两种取值,不存在像C/C++里那样和其他类型之间的转换,即没有非零为真的说法了.
类型 | 大小/字节 | .NET类型 | 说明 |
byte | 1 | Byte | 无符号(值0-255) |
char | 2 | Char | Unicode字符 |
bool | 1 | Boolean | true或者false |
sbyte | 1 | SByte | 有符号(-128-127) |
short | 2 | Int16 | |
ushort | 2 | UInt16 | |
int | 4 | Int32 | |
uint | 4 | UInt32 | |
float | 4 | Single | |
double | 8 | Double | |
decimal | 16 | Decimal | 最大28位加小数点,要求加前缀M或者m |
long | 8 | Int64 | |
ulong | 8 | UInt64 |
一些需要注意的地方:
虽然C#将char定义为整型类型,但是它不能随意地在任何情况下与整数混用。这就意味着,在C#中把一个字符变量当作另外的整数数据类型看待是行不通的.
char ch;
ch=‘X';
ch=10;//error
之所以不能这样使用,和类型的隐式(implicit)转换有关. 隐式转换只能发生在转换保证不损失信息的前提下,比如2字节的short转换为4字节的int, 上述语句试图将整形隐式转换为char类型,是不可以的,但是可以使用显式(explicit)转换: ch=(char)10;
条件分支语句
case语句: 在case语句不为空时,不能向下执行,如下例:
case 1: //可以向下执行
case 2:
因为这里case 1为空语句, 但是如果像下面这样:
case 1:
takesomeaction(); //不能向下执行
case 2:
这里case 1有一条语句,所以不能向下执行.如果需要case1 继续向下执行case2,必须显式使用goto 如下:
case 1:
takesomeaction();
goto case2 ;//显式向下执行
case 2:
条件编译
在编译代码之前,会运行预处理器(preprocessor),为编译器做一些准备工作,预处理器会检查代码, 寻找特殊的预处理器指令(directive),这些指令都以符号#开头,他们可以定义标识符,然后检查这些标识符是否存在.
#define DEBUG 定义了一个预处理器标识符DEBUG, 定义标识符必须在文件的最上面包括using之前.
# define DEBUG
#if DEBUG
//如果定义了DEBUG就编译此代码
#elif DEBUG1
//如果定义了DEBUG1就编译此代码
# else
//如果DEBUG和DEBUG1都没定义,则编译此代码
#endif
# undef DEBUG//取消定义DEBUG