C#本质论第二章。
基本数据类型
C#的基本数据类型包括整型,浮点类型以及decimal
的特殊浮点类型。
整数类型
- C#的所有基本类型都有短名称和完整名称,完整名称对应于基类库(Base Class Library)中的类型命名。
- C#的整数类型共有8种:
sbyte
byte
short
ushort
int
uint
long
ulong
,其中对应的数据类型所占的大小分别为8位
16位
32位
64位
。对应的范围为2的相应次方个数,具体表示为负2的n-1次方
到2的n-1次方
。
浮点类型
- 二进制浮点类型无法精确的表示某个数,除非用分数表示时,其分母为2的整数次幂。
C#的浮点类型有两种:
float
double
,对应的数据类型为32位
与64位
。//TODO 具体的表示范围原理待考。
十进制浮点类型:C#提供了128位精度的十进制浮点类型
decimal
,适合大而精确的计算,它保证范围内的所有十进制数都是精确的。
字面量(literal value)
就是字面值,一种常量,编译器会自动的将其转换成基本数据类型。另外C#编译器允许向非int数值类型赋值,前提是其值对于目标数据类型是合法的,但这只对字面量成立。
- 解析顺序:解析成能够存储该值的第一种数据类型。
- 没有后缀的数值字面量:
int
uint
long
ulong
- 具有后缀U的数值字面量:
uint
ulong
- 具有后缀L的数值字面量:
long
ulong
- 具有LU或UL后缀的数值字面量:
ulong
- 没有后缀的数值字面量:
布尔类型以及字符类型
- 布尔类型:条件类型,大小为一个字节。
- 字符类型:
char
表示16位字符,取值范围与ushort
相同,但是char
是一种独特类型。
字符串
零或多个字符组成的有限序列称为字符串。
- 在字符串前面使用
@
可以指明转义序列不被处理,结果是一个逐字字符串字面量(verbatim string literal),不仅将反斜杠当做普通字符处理,还会逐字解释空白字符。 - 字符串插值:在一个字符串字面量前加上一个
$
符号前缀,然后将表达式嵌入大括号中,这样做用于支持插入表达式。
System.Console.WriteLine($"Your full name is {firstname} {lastname}")
事实上这样写调用了string.Format()
。 using
与using static
指令: 静态方法的调用通常为:命名空间前缀+类型名,通过using static
+命名空间前缀+类型名来避免重复显式声明命名空间前缀+类型名。但其只对静态方法和属性有效。
关键字:null
与void
null
值只能赋给引用类型,指针类型与可空值类型。- 赋值为
null
的变量已被设置,使其不指向任何位置,而未赋值的变量未被设置,此两者不能等同。 void
:- 标记方法不返回任何数据
- 表示指针指向未知类型的存储位置。
隐式类型的局部变量:var
只要在声明变量的同时用确定类型的表达式初始化它,就可以不必显式的指定数据类型。
虽然允许使用var
取代显式的数据类型,但是在数据类型已知的情况下,最好不要使用var
,这是出于可读性以及正确性的考虑,除非右侧的数据类型十分明显,否则应避免使用var
类型。
- 匿名类型:匿名类型是在方法内部动态声明的数据类型,而不是显式的类定义来声明的。
通过
var
,可以将匿名类型的实例赋给隐式类型的局部变量:以获得更少数据元素的功能联合使用。var patent1 = new { Title = "bifocals", YearOfPublication = "1784" };
类型分类
所有类型都可以归为值类型或引用类型,它们的区别在于复制方式:值类型的数据总是进行值复制,引用类型的数据总是进行引用复制。