大纲
数值类型 | 更多类型 | null和void | 类型的分类 | 转换 | 数组 |
---|---|---|---|---|---|
整数类型 | 布尔类型 |   | 值类型 | 显示转型 | 声明 |
浮点类型 | 字符类型 |   | 引用类型 | 隐式转型 | 实例化 |
字面值 | 字符串 |   |   | 不转型 | 赋值 |
十进制浮点类型 |   |   |   |   | 使用 |
  |   |   |   |   | 字符串作为数组使用 |
基本数值类型
整数类型
C#共有8种整数类型 | |||||
---|---|---|---|---|---|
类型 | 大小 | 范围(包括边界值) | BCL名称 | 是否有符号 | 后缀 |
sbyte | 8位 | -128~127 | System.SByte | 是 |   |
byte | 8位 | 0~255 | System.Byte | 否 |   |
short | 16位 | -32768~32767 | System.Int16 | 是 |   |
ushort | 16位 | 0~65535 | System.UInte16 | 否 |   |
int | 32位 | -2147483648~2147483647 | System.Int32 | 是 |   |
uint | 32位 | 0~4294967295 | System.UInt32 | 否 | U或u |
long | 64位 | -9223372036854775808~9223372036854775807 | System.Int64 | 是 | L或l |
ulong | 64位 | 0~18446744073709551615 | System.UInt64 | 否 | UL或ul |
有无符号即是指正负 ,有符号的 最高为为符号位,称为原码 0代表正 1代表负
浮点类型
浮点数的精度是可变的。除非用分数表示时分母恰好是2的整数次幂
浮点类型 | |||||
---|---|---|---|---|---|
类型 | 大小 | 范围 | BCL名称 | 有效数字 | 后缀 |
float | 32位 |   | System.Single | 7 | F或f |
double | 64位 |   | System.Double | 15~16 | D或d |
十进制浮点类型
decimal类型 | |||||
---|---|---|---|---|---|
类型 | 大小 | 范围 | BCL名称 | 有效数字 | 后缀 |
decimal | 128位 |   | System.Decimal | 28~29 | M或m |
与浮点数不同,decimal类型保证范围内的所有十进制数都是精确的。所以,对于decimal类型来说,0.1就是0.1,而不是一个近似值。不过,虽然decima1类型具有比浮点类型更高的精度,但它的范围较小。所以,从浮点类型转换为decimal类型可能发生溢出错误。此外,decimal的计算速度稍慢(虽然这个差别可以忽略不计)
字面量
将数格式化成 16进制 WriteLine($"0x{42:X}");X的大小决定了十六进制里的大小写
使用:R(round-trip格式化)准确的将精度高的转成字符串,不然可能最后一位会丢失
更多基本类型
布尔类型
字符类型
字符类型char表示l6位字符,其取值范围对应于Unicode字符集。从技术上说,char的大小和16位无符号整数(ushort)相同,后者的取值范围是0~65535。但char是C#的一个独特类型,在代码中应该体现这一点。
转义字符 | ||
---|---|---|
转义序列 | 字符名称 | Unicode编码 |
\' | 单引号 | \u0027 |
\" | 双引号 | \u0022 |
\\ | 反斜杠 | \u005C |
\0 | Null | \u0000 |
\a | 警告(系统提示音) | \u0007 |
\b | 退格 | \u0008 |
\f | 换页 | \u000C |
\n | 换行 | \u000A |
\r | 回车 | \u000D |
\t | 水平制表符 | \u0009 |
\v | 垂直制表符 | u000B |
\uxxxx | 十六进制Unicode字符 | \u0029 |
\xn[n]n | 十六进制Unicode字符(前三个占位符是可选的,\uxxxx的长度可变版本) | \u3A |
\Uxxxxxxxx | Unicode转义序列,用于创建代理项对 | \uD840DC01() |
可以在字符串前面使用@符号,指明转义序列不被处理
system. Console. Writeline(@"\\t\a");
字符串插值
System. Console. Writeline($"Your full name is { firstName){lastName}.");
using static
using static System.Console;
public class CSharpTest
{
public CSharpTest()
{
Write("这样就可以不用写前缀了");
}
}
字符串是不可变的每次修改都是新建字符串,如果需要经常修改的字符串建议使用 System.Text.StringBuilder
类型的分类
值类型是直接包含值,引用类型包含引用。
类声明的无论是值类型还是引用类型都在类的实例上面(也就是托管堆上面),类实例里面声明的引用类型,只包含引用,临时声明的变量才会在栈上面,值类型直接存在栈上面,引用类型把引用放在栈上面,实例还是在托管堆
方法的调用,都会对参数进行值复制,值类型是复制值,引用类型复制引用
可空修饰符
int? a=null;
数据类型的转换
显示转换
int intNumber=(int)longNumber;
checked和unchecked转换
class Program
{
static void Main()
{
checked
{
int n = int.MaxValue; n = n + 1; System.Console.WriteLine(n);
}
}
}
在checked块内,如果在运行时发生一次溢出的赋值,就会引发异常。
隐式类型
尽量使用tryParse转换,转换出错的时候不会引发异常而是返回false类似的tryget之类的也是
数组
数组是引用类型int[,,]多维数组
int[][]交错数组
多维数组的每一维大小都得一样 交错数组的可以不一样
int[,] cells = new int[2,3] { { 2,3,3},{3,2,2 } };
int[][] bags = new int[][] { new int[]{1,2,2},new int[]{3,3 } };
交错数组要求为内部的每个数组都创建实例!
数组声明之后再赋值需要new
数组的clear方法不清除数组元素,只是变成默认值 System.Array.Clear(array);
List的Clear会清除数组元素
交错数组Length返回的是外部数组的元素数(也就是具体有多少个数组构成)Length和GetLength不一样
多维数组Length返回的是元素的总个数