.NET 数据类型概述
任何一门开发语言都需要数据类型作为其基础根本,就如同自然语言中的文字一般,所以想要掌握一门开发语言就要先了解其中的数据类型,接下来我就谈谈我对.NET的数据类型的了解(开发语言以C#为主)。
数据类型
在C#中数据类型主要可以分为值类型、引用类型和指针类型,以下是一个数据类型的归类表:
- ValueType
- 数值数据
-
- sbyte:-128~127
- byte:0~255
- short:-32768~32767
- ushort:0~65535
- int:-2147483648~2147483647
- uint:0~4294967295
- long:-9223372036854775808~9223372036854775807
- ulong:0~18446744073709551615
- float:1.5*10^-45~3.4*10^38
- double:5*10^-324~1.7*10^308
- decimal:1*10^-28~7.9*10^2
-
- Boolean
-
- 关键字:bool
- 值范围:True或False
-
- Char
-
- 关键字:char
- 值范围:一个Unicode字符,存储0~65535之间的整数
-
- DateTime和TimeSpan
-
- Numerics
-
- 结构:BigInteger
-
- 枚举
- 底层存储:byte、short、int(默认)、long
- 结构
- 枚举
- 引用类型
-
- Class 类
- Interface 接口
- Dynamic
- Object 超级父类
- String 字符串
- Delegate 委托
-
- Array 数组
- 指针类型
数据类型默认值
- 数值数据:0
- Boolean:false
- Char:单个空字符
- DateTime和TimeSpan:1/1/0001 12:00:00 AM
- Numerics:0
- 引用类型:null
可空类型
用于表示没有值的数值数据,在实际类型的值上加上null,这种语法只对值类型是合法的,语法是只要在值类型关键字上加?后缀。例如:int? nullableInt = 0;
内存分配
值类型的变量是分配在栈上,当变量离开定义域范围就会被内存移除。
引用类型变量则是分配在堆上进行托管,有垃圾回收机制控制。
复制
- 浅复制
- 深复制
赋值操作
值类型赋值是复制一份副本,2个变量是独立操作的。
引用类型赋值是2个变量是指向托管堆中的同一个对象,改变其中一个变量的值,另一个也会改变。
值类型中包含引用类型时赋值是默认为浅复制。
传递
- 值类型
-
- 按值传递
- 引用类型
-
- 按值传递
-
- 按引用传递
类型转换
- 隐式转换
-
- 宽化
- 显示转换
-
- 强制类型转换
-
- 窄化
-
-
- 溢出检测(默认不检测)
-
- 代码级检测
-
- unchecked
-
checked
- 项目级检测
-
- VS->项目属性->生成->高级->检测运算上下溢
-
- Convert命令
- 自定义类型转换
使用关键字explicit和implicit自定义类型转换。implicit隐式转换运算符更容易使用,但是如果您希望运算符的用户能够意识到正在进行转换,则显式运算符很有用。