文章目录
类型转换
类型转换分为:强制转换(显示转换)与隐式转换
按内存分类:装箱、拆箱
隐式转换
隐式转换条件:对于整数类型,源类型的范围是目标类型范围的正确子集。可以由小类型往大类型转,例如:int -> double,不能由double -> int。
强制转换
如果进行转换可能会导致信息丢失,则编译器会要求执行显示转换,显示转换也称为强制转换。
示例:
c#
double x = 3.1415926;
int a;
//double ==> int
a = (int)x;
a = Covert.ToInt32(x);
c#
int a = 30;
//转换为字符串
string s1 = a.ToString();
string s2 = Convert.ToString(a);
关键字as :用于进行安全的引用类型转换。as
不能用于值类型,智能用于引用类型。
应用类型之间的转换:
c#
class Program
{
static void Main(string[] args)
{
object per = new Person();//创建一个类对象
Person person1 = per as Person;//使用as进行强制转换
Person person2 = (Person)per;//强制转换
}
}
//声明一个类
class Person
{
}
装箱与拆箱
装箱:把值类型转换成引用类型
拆箱:把引用类型转换成值类型
装箱示例:
c#
int num = 10;//值类型,存储在栈内存
object obj = num;//装箱操作:将num转换为object类型
内存分配
- 装箱操作会将值类型的值复制到堆内存中。
- 堆内存中的对象包含值类型的值,并且会占用额外的内存空间。
- 装箱操作会增加内存分配的开销。
拆箱示例:
c#
int num = 10; //值类型
object obj = num; // 装箱操作
int un = (int)obj;//拆箱操作:将object转换回int
注意
- 拆箱操作必须显示进行类型转换。
- 拆箱操作只会成功,如果引用类型确实包含对应的值类型。