C#中的数据类型和类型转换
qingheluo2021-08-23清河洛464
C#中的数据类型在C#中,变量分为值类型(Value types)、引用类型(Reference types)和指针类型(Pointer types)三种类型C# 允许定义其他值类型的变量,比如 enum,也允许定义引用类型变量,比如 class值类型(Value types)值类型变量可以直接分配给一个值,直接包含数据,它们是从类System.ValueType中派生的bool ,布尔值,True或False,默认False
char ,16位Unicode字符,U +0000到U +ffff,默认‘\0‘
decimal,128位精确的十进制值,28-29有效位数,默认0.0...
C#中的数据类型
在C#中,变量分为值类型(Value types)、引用类型(Reference types)和指针类型(Pointer types)三种类型
C# 允许定义其他值类型的变量,比如 enum,也允许定义引用类型变量,比如 class
值类型(Value types)
值类型变量可以直接分配给一个值,直接包含数据,它们是从类System.ValueType中派生的
bool ,布尔值,True或False,默认False char ,16位Unicode字符,U +0000到U +ffff,默认‘\0‘ decimal,128位精确的十进制值,28-29有效位数,默认0.0M 整数类型(默认值都为0): byte ,8位无符号, 0到255 sbyte ,8位有符号, -128到127 ushort,16位无符号,0到65535 short ,16位有符号,-32,768到32,767 uint ,32位无符号,0到4294967295 int ,32位有符号,-2147483648到2147483647 ulong ,64位无符号,0到18446744073709551615 long ,64位有符号,-9223372036854775808到9223372036854775807,默认0L 数字后面的后缀(不区分大小写)可以表示数值的类型:L表示64位长整形,F表示32位单精度浮点数,D表示64位双精度浮点数,U表示无符号 12ul表示一个无符号的长整形12 浮点数类型: float,32位单精度浮点型,-3.4E-38到+3.4E38,默认0.0F double,64位双精度浮点型,(+/-)5.0 E-324到(+/-)1.7E308,默认0.0D 以上值类型可以通过sizeof(type)方法获取以字节为单位存储对象或类型的存储尺寸(位数除以8)
引用类型(Reference types)
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用
引用类型指向的是一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。
内置的引用类型有对象(Object)类型、动态(Dynamic)类型和字符串(String)类型
对象(Object)类型
是C#通用类型系统中所有数据类型的终极基类,是System.Object类的别名。 所以对象(Object)类型可以被分配任何其他类型的值。但是,在分配值之前需要先进行类型转换。 当一个值类型转换为对象类型时,称为装箱;当一个对象类型转换为值类型时,称为拆箱
动态(Dynamic)类型
可以存储任何类型的值在动态数据类型变量中,这些变量的类型检查是在运行时发生的。 动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的
字符串(String)类型
允许给变量分配任何字符串值,是System.String类的别名,是从对象(Object)类型派生的。 String类型的值可以通过两种形式进行分配:引号("")和@引号(@"") 字符串的前面加@,称作"逐字字符串",会将转义字符(\)当作普通字符对待,如@"C:\Windows"等价于"C:\\Windows"
指针类型(Pointer types)
指针类型(Pointer types)是用来存储另一种类型的内存地址
通过type* identifier;来明指针类型,如int* demo;
C#中的类型转换
变量val.GetType()可以获取值的数据类型
隐式类型转换:这些转换是C#默认的以安全方式进行的转换,不会导致数据丢失
显式类型转换:即强制类型转换。需要强制转换运算符"(type)变量",且会造成数据丢失
C#提供的内置类型转换方法
val.ToBoolean():转换为布尔型 val.ToByte():转换为字节类型 val.ToSbyte():转换为有符号字节类型 val.ToInt16():转换为16位整数类型 val.ToUInt16():转换为16位无符号整数类型 val.ToInt32():转换为32位整数类型 val.ToUInt32():转换为32位无符号整数类型 val.ToInt64():转换为64位整数类型 val.ToUInt64():转换为64位无符号整数类型 val.ToSingle():转换为小浮点数类型 val.ToDouble():转换为双精度浮点型 val.ToDecimal():转换为十进制类型(只能转换浮点型或整数类型) val.ToChar():转换为单个Unicode字符类型 val.ToDateTime():转换为日期-时间结构(只能转换整数或字符串类型) val.ToString():转换为字符串类型 val.ToType(type):转换为指定类型