变量
变量是存储内容的别名,表示存储位置。变量可以映射计算机内存地址,通过变量可以获取解析相应的内存块,最后返回要访问的数据。
每个变量都具有一种类型,用于确定可存储范围、所占内存大小和布局。在获取变量的值之前,必须明确赋值。
变量声明包含访问修饰符、变量类型、变量名。变量可在声明时赋值。当在程序中声明变量时,必须指定其类型或使用var
关键字让编译器推断类型。 在同一代码块内,声明变量后,不能使用新类型重新声明同名变量,并且不能分配与其声明类型不兼容的值,但可以转换成其他类型。变量可被多次赋值,但其值为最近一次的赋值。
// 声明
float temperature;
// 赋值:第一次赋值称初始化
temperature = 37.6f;
// 声明并初始化
int[] source = { 0, 1, 2 };
// 单行声明、赋值多个同类型变量
int age = 18, money = 0;
// 推断类型
var sourceItem = sourece[0];
变量是lvalue的,可以在表达式中作为左值。数值是rvalue的,不能被赋值,不能在表达式中作为左值。
常量
常量是不可变的值,在编译时是已知的,于程序生命周期内不会改变。 常量可以被当作常规的变量,只是其值在定义后不能被修改。常量只能是基本数据类型,比如整数、浮点、布尔、字符、字符串或枚举常量。
使用const
关键字定义常量,在声明时必须初始化。常量默认是static
、readonly
的,只有⼀个副本。定义一个常量的语法如下:
public const int months = 12;
常量标识符类似占位符。在编译过程中,编译器会将常量的文本值直接替换到它生成的IL代码中,运行时没有与常量相关联的变量地址,所以此后便与该常量无关了,因此常量不能通过引用传递,且不能在表达式中显示为左值。
引用其他程序集中定义的常量需要注意,如果该程序集定义了新的常量值,则程序仍将保留旧的文本值,即常量不支持跨程序集版本更新,所以:
- 不随意使用常量,尤其是可能变化的数据。
- 不随意更改已定义好的常量值。
- 使用常量的代码必须重新编译。
常用内置类型
整型:
C#关键字 | 范围 | 内存占用 | .NET类型 |
---|---|---|---|
sbyte | -27~27-1 | 带符号8位整数 | System.SByte |
byte | 0~28-1 | 无符号8位整数 | System.Byte |
short | -215~215-1 | 带符号16位整数 | System.Int16 |
ushort | 0~216-1 | 无符号16位整数 | System.UInt16 |
int | -231~231-1 | 带符号32位整数 | System.Int32 |
uint | 0~232-1 | 无符号32位整数 | System.UInt32 |
long | -263~263-1 | 带符号64位整数 | System.Int64 |
ulong | 0~264-1 | 无符号64位整数 | System.UInt64 |
nint | 取决于运行平台 | 带符号32/64位整数 | System.IntPtr |
nuint | 取决于运行平台 | 无符号32/64位整数 | System.UIntPtr |
浮点类型:
C#关键字 | 范围 | 精度 | 内存占用 | .NET类型 |
---|---|---|---|---|
float | ±1.5x10−45~±3.4x1038 | 约6~9位精度 | 4字节 | System.Single |
double | ±5.0x10−324~±1.7x10308 | 约15~17位精度 | 8字节 | System.Double |
decimal | ±1.0x10−28~±7.9228x1028 | 约28~29位精度 | 16字节 | System.Decimal |
布尔型bool(System.Boolean)表示真假,其值只能为true
或false
,占1字节。
字符型char(System.Char)用于表示单个Unicode UTF-16字符,用'
包裹,占2字节,范围是U+0000~U+FFFF,默认值为\0
,即U+0000。
字符串类型string(System.String)用于表示多个字符,用"
包裹。
转义字符
转义字符是字符串的一部分,用于表示特殊含义的字符,如单引号、双引号。通常使用反斜杠\
来表示。
常用转义字符有:
\\
:\
字符。\'
:'
字符。\"
:"
字符。\?
:?
字符。\a
:警报音。\b
:退格键(Backspace)。\f
:换页符(Form feed)。\n
:换行符(Newline)。\r
:回车。\t
:水平制表符tab。\v
:垂直制表符tab。\ooo
:一到三位的八进制数。\xhh
:一个或多个数字的十六进制数。
字符串前使用@
修饰,为逐字字符串,会取消转义字符。