C#类型转换

      类型转换就是将一种类型转换成另一种类型,转换可以是隐式转换或者显式转换,下面将详细介绍这两种转换方式,并讲解有关装箱和拆箱的内容。

01

隐式转换

       所谓隐式转换就是不需要声明就能进行的转换。进行隐式转换时,编译器不需要进行检查就能安全地进行转换。表 1 列出了可以进行隐式转换的数据类型。

表1  隐式类型转换表

5d1a8bb1877e2f99dafa7ce2cb66a3aa.png

       从 int、uint、long 或 ulong 到 float,以及从 long 或 ulong 到 double 的转换可能导致精度损失,但是不会影响其数量级,其他的隐式转换不会丢失任何信息。

      说明 当一种类型的值转换为大小相等或更大的另一类型时,则发生扩大转换;当一种类型的值转换为较小的另一种类型时,则发生收缩转换。

【例 1】将int 类型的值隐式转换成 long 类型。

代码如下:

int i= 927;       //声明一个整型变量i并初始化为 927
 long j=i;        //隐式转换成long 类型

02

显示转换

       显式转换也可以称为强制转换,需要在代码中明确地声明要转换的类型。如果要在不存在隐式转换的类型之间进行转换,就需要使用显式转换。表 2 列出了需要进行显式转换的数据类型。

表2  显式类型转换表

aea47672ea59f9e83dfd62bf173e4331.png

       由于显式转换包括所有隐式转换和显式转换,因此总是可以使用强制转换表达式从任何数值类型转换为任何其他的数值类型。

【例 2】 创建一个控制台应用程序,将 double 类型的x进行显式类型转换。

代码如下:

static void Main(string[] args)
{
double x=19810927.0112;         //建立double类型变量x
int y=(int)x;                  //显式转换成整型变量y
Console.WriteLine(y);          //输出整型变量y
Console.ReadLine();
}

程序运行结果为 19810927。

也可以通过 Convert 关键字进行显式类型转换,上述例子还可以通过下面的代码实现。

【例 3】 创建一个控制台应用程序,通过 Convert 关键字进行显式类型转换。代码如下:

double x= 19810927.0112;        //建立double类型变量 x
int y=Convert.ToInt32(x);      //通过Convert关键字转换
Console.WriteLine(y);          //输出整型变量y
Console.ReadLine();

03

装箱和拆箱

       将值类型转换为引用类型的过程叫做装箱,相反,将引用类型转换为值类型的过程叫做拆箱。

(1)装箱

       装箱允许将值类型隐式转换成引用类型,下面通过一个实例演示如何进行装箱操作。

【例 4】 创建一个控制台应用程序,声明一个整型变量 i 并赋值为 2008。然后将其复制到装箱对象 obj 中,最后再改变变量 i 的值。

代码如下:

static void Main(string[] args)
{
int i=2008;       //声明一个int类型变量i,并初始化为2008
object obj=i;    //声明一个object类型 obj,其初始化值为i
Console.WriteLine("1.i的值为{0},装箱之后的对象为{1}",i,obj);
i=927;            //重新将i赋值为 927
Console.WriteLine("2.i的值为{0},装箱之后的对象为{1}",i,obj);
Console.ReadLine();
}

程序的运行结果为:

1. i 的值为2008,装箱之后的对象为 2008

2. i 的值为 927,装箱之后的对象为 2008

       从程序运行结果可以看出,将值类型变量的值复制到装箱得到的对象中,装箱后改变值类型变量的值,并不会影响装箱对象的值。

(2)拆箱

       拆箱允许将引用类型显式转换为值类型,下面通过一个实例演示拆箱的过程。

【例 5】创建一个控制台应用程序,声明一个整型变量 i 并赋值为 112。然后将其复制到装箱对象 obj 中。最后进行拆箱操作,将装箱对象 obj 赋值给整型变量 j。

代码如下:

static void Main(string[] args)
{
int i=112;        //声明一个int类型的变量i,并初始化为 112
object obj=i;     //执行装箱操作
Console.WriteLine("装箱操作:值为{0},装箱之后对象为{1}",1,obj);
int j=(int)obj;      //执行拆箱操作
Console.WriteLine("拆箱操作:装箱对象为{0},值为{1}",obj,j);
Console.ReadLine();
}

程序运行结果为:

装箱操作: 值为 112,装箱之后对象为 112

拆箱操作: 装箱对象为112,值为 112

      查看程序运行结果不难看出,拆箱后得到的值类型数据的值与装箱对象相等。需要注意的是,在执行拆箱操作时,要符合类型一致的原则,否则会出现异常。

说明 装箱是将一个值类型转换为一个对象类型(object),而拆箱则是将一个对象类型显式转换为一个值类型。对于装箱而言,它是将被装箱的值类型复制一个副本来转换;而对于拆箱而言,需要注意类型的兼容性,例如,不能将一个值为“string”的 object 类型转换为 int类型。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值