1.隐式转换
例如:
int i = 10;
float f = i;
2.显式转换
在转换时,在数据的左边要加上要转换的类型名称
例如:
float f = 10.4f;
int i = (float)f;
3.装箱/拆箱
装箱就是将值类型转换成引用类型
拆箱则是引用转换成值类型
在将值类型装箱成引用类型后
拆箱时,拆箱后的类型必须与装箱时的类型一致
装箱是隐式转换
拆箱是显式转换
例如:
decimal d = 10.8m;
object o = d;
int i = (int)d; //error
decimal d1 = (decimal)d //ok
但是如果想直接把o转换为int类型
可以使用Convert.ToInt32(o),因为此方法会先将o转换成int类型,然后再赋值给int类型
注意:在使用装箱将值类型转换成多个引用类型时,被转换的引用类型可能不相等。
示例:
int i = 10;
object o1 = i;
object o2 = i;
//因为o1和o2指向不同的对象实例(引用地址不同),当==用于比较引用类型时,是对引用地址进行比较,
//所以即使值相等,在比较时也被视为不相等
if (o1 == o2)//false
{
MessageBox.Show("");
}
只有拆箱后进行比较,才会相等
if ((int)o1 == (int)o2)//true
{
MessageBox.Show("");
}
4.as
1.显式转换在转换失败时会抛出异常
as在转换失败时会为对象设置null
2.as只能用于引用转换