打印本文 打印本文 关闭窗口 关闭窗口
Csharp+Asp.net系列教程(三)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数3184  更新时间:2009/4/23 10:46:28  文章录入:mintao  责任编辑:mintao
o = i; // Implicit boxing
         i = 456; // Change the contents of i
         Console.WriteLine("The value-type value = {0}", i);
         Console.WriteLine("The object-type value = {0}", o);
         }
        }
        输出
        The value-type value = 456
        The object-type value = 123

    取消装箱
        取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括:

        检查对象实例,确保它是给定值类型的一个装箱值。
        将该值从实例复制到值类型变量中。
        以下语句同时说明了装箱和取消装箱操作:

        int i = 123; // A value type
        object box = i; // Boxing
        int j = (int)box; // Unboxing
        下图显示了以上语句的结果。

取消装箱转换
        在堆栈上        在堆上
        i 123
        int i=123;
        o                (将i装箱)
        object o=i;        int 123
        j 123
        int j=(int) o;
        为使到给定值类型的取消装箱转换在运行时取得成功,源参数的值必须是对某个对象的引用,而该对象先前是通过将该值类型的值装箱创建的。如果源参数为 null 或是对一个不兼容对象的引用,则会引发 InvalidCastException。
        示例
        下面的示例阐释无效取消装箱的情况,即错误的取消装箱如何导致 InvalidCastException。通过使用 try 和 catch,发生错误时会显示错误信息。
        using System;
        public class UnboxingTest
        {
         public static void Main()
         {
         int intI = 123;
         // Boxing
         object o = intI;
         // Reference to incompatible object produces InvalidCastException
         try
         {
         int intJ = (short) o;
         Console.WriteLine("Unboxing OK.");
         }
         catch (InvalidCastException e)
         {
         Console.WriteLine("{0} Error: Incorrect unboxing.",e);
         }
         }
        }
        输出
        System.InvalidCastException
         at UnboxingTest.Main() Error: Incorrect unboxing.
        如果将下列语句:
        int intJ = (short) o;
        更改为:
        int intJ = (int) o;
        转换将执行,而您将得到输出“Unboxing OK”。

上一页  [1] [2] [3] [4] 

打印本文 打印本文 关闭窗口 关闭窗口