值类型(Value types):把值直接放到变量空间的数据类型 值类型:数值类型、bool型、枚举、结构体、可空类型、用户定义的结构体 数据类型值类型表:
当您声明一个 int 类型时,系统分配内存来存储值。 int x=15; 变量本质 :内存里面分配一个空间(大小) 引用类型包含:数组、类、委托、接口、object、字符串、用户定义的类等。 New: 1.不包含存储在变量中的实际数据,但它们包含对变量的引用。 2.换句话说,它们指的是一个内存位置。 3.使用多个变量时,引用类型可以指向一个内存位置。 4.如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。 象(Object)类型:根类型 1.对象(Object)类型 是 C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。 2.Object 是 System.Object 类的别名。 3.所以对象(Object)类型可以被分配(转换为)任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。
隐式类型转换 类型转换:把数据从一种类型转换为另一种类型。 在转换中C#默认的以安全方式进行转换,这样不会导致数据的丢失,如:从小的整数类型转换为大的整数类型,从派生类转换为基类。 隐式转换规则是:任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。基于这个转换规则,C#的隐式转换不会导致数据丢失。需要注意的是我们最常用的简单类型bool和string没有隐式转换。 a = 100; b = a;//隐式转换显式类型转换(又叫强制类型转换) 显式转换需要强制转换运算符,而且强制转换会造成数据丢失。 double c = 10.5; int d = (int)c;//显示转换 提醒: (1) 显式转换可能会导致错误。 (2) 进行这种转换时编译器将对转换进行溢出检测。如果有溢出说明转换失败,就表明 源类型不是一个合法的目标类型。无法进行类型转换。 (3) 强制类型转换会造成数据丢失,如上面的例子中,最终得到的d值为10。 3.通过方法进行类型转换 (1) 使用ToString()方法。 所有类型都继承了Object基类,所以都有ToString()这个方法(转化成字符串的方法)。 (2) 通过Convert类进行转换。【常用,可以成为“万能数据转换类”】 Convert类中提供了很多转换的方法。 使用这些方法的前提是能将需要转换的对象转换成相应的类型,如果不能转换则会报格式不对的错误。 注意:使用Convert.ToInt32()时,如果 value 为两个整数中间的数字,则返回二者中的偶数;即 4.5 转换为 4,而 5.5 转换为 6。 Convert.ToBoolean(var) var转换为bool Convert.ToByte(var) var转换为byte Convert.ToChar(var) var转换为char Convert.ToDecimal(var) var转换为decimal Convert.ToDouble(var) var转换为double Convert.ToInt16(var) var转换为short Convert.ToInt32(var) var转换为int Convert.ToInt64(var) var转换为long Convert.ToSByte(var) var转换为sbyte Convert.ToSingle(var) var转换为float Convert.ToString(var) var转换为string Convert.ToUInt16(var) var转换为ushort Convert.ToUInt32(var) var转换为uint Convert.ToUInt64(var) var转换为ulong(3) int.Parse() 和int.TryParse() 整数转换,【不常用】 通过int.TryParse()方法转换,该转换方法与int.Parse()转换方法类似,不同点在于int.Parse()方法无法转换成功的情况该方法能正常执行并返回0。也就是说int.TryParse()方法比int.Parse()方法多了一个异常处理,如果出现异常则返回false,并且将输出参数返回0。 总结:在运算符的数据类型不同,则先转换成同一类型,然后进行运算;转换数据按长度增加的方向进行,以保证精度不降低,如果一个操作数是long型,计算结果就是long型;如果一个操作数是float型,计算结果就是float型;如果一个操作数是double型,计算结果就是double型。例如int型和long型运算时,先把int量转成long型后再进行运算;所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算;.在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型将转换为左边变量的类型。如果右边表达式的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。