大纲

数值类型更多类型null和void类型的分类转换数组
整数类型布尔类型 值类型显示转型声明
浮点类型字符类型 引用类型隐式转型实例化
字面值字符串  不转型赋值
十进制浮点类型    使用
     字符串作为数组使用


基本数值类型

整数类型

C#共有8种整数类型
类型大小范围(包括边界值)BCL名称是否有符号后缀
sbyte8位-128~127System.SByte 
byte8位0~255System.Byte 
short16位-32768~32767System.Int16 
ushort16位0~65535System.UInte16 
int32位-2147483648~2147483647System.Int32 
uint 32位0~4294967295System.UInt32U或u
long64位-9223372036854775808~9223372036854775807System.Int64L或l
ulong64位0~18446744073709551615System.UInt64UL或ul

有无符号即是指正负 ,有符号的 最高为为符号位,称为原码 0代表正 1代表负


浮点类型

浮点数的精度是可变的。除非用分数表示时分母恰好是2的整数次幂

浮点类型
类型大小范围BCL名称有效数字后缀
float32位 System.Single7F或f
double64位 System.Double15~16D或d

十进制浮点类型

decimal类型
类型大小范围BCL名称有效数字后缀
decimal128位 System.Decimal28~29M或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
\0Null\u0000
\a警告(系统提示音)\u0007
\b退格\u0008
\f换页\u000C
\n换行\u000A
\r回车\u000D
\t水平制表符\u0009
\v垂直制表符u000B
\uxxxx十六进制Unicode字符\u0029
\xn[n]n十六进制Unicode字符(前三个占位符是可选的,\uxxxx的长度可变版本)\u3A
\UxxxxxxxxUnicode转义序列,用于创建代理项对\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返回的是元素的总个数

最后修改:2019 年 06 月 30 日 12 : 37 PM