zoukankan      html  css  js  c++  java
  • C#語法學習裝箱(box)和拆箱(unbox)

     




    /*
     * Created by SharpDevelop.
     * User: Administrator
     * Date: 2008/9/4
     * Time: 上午 12:10
     * 
     
    */

    using System;
    class Test
    {
        
    static void Main()
        {
            
    int i=123;//第一次裝箱
            object o=i;
            i
    =456;
            
    //這里由於使用了+號也就會調用字符串的
            
    //String.Concat(Object,Object,Object);
            
    //這也就讓下面的都需要轉換成Object類型
            Console.WriteLine(i //第二次裝箱
                              + ",  " +
                              (
    int)o);//這里先發生一次拆箱,再接著發生第三次裝箱
        }
    }
    //問題:上面的程序會進行幾次裝箱和拆箱.
    //3次裝箱,1次拆箱.
    //這里也就告訴我們在寫程序的時候不注意就進行裝箱和拆箱的操作
    //為了提高程序的性能我們可以裝輸出語句改為下面的:
    //Console.WriteLine(i + ", " + o);輸出結果一致.這時候進行了兩次裝箱
    //Console.WriteLine(i.ToString() + ", " + o);輸出結果一致.這時候進行了一次裝箱

    /*
     * Created by SharpDevelop.
     * User: Administrator
     * Date: 2008/9/4
     * Time: 上午 12:27
     * 裝箱和拆箱的性能問題:
     * Box 和 Unbox 處理是大量耗用運算資源的處理序。當實值型別經 Box 處理時,必須建立全新的物件。這個過程需要的時間可能是指派的 20 倍。執行 Unbox 處理時,轉換處理序所需的時間可能是指派的四倍。
     * 上面這句是MSDN的說法,因此在實際編程中我們要盡能避免裝箱和拆箱操作.
     
    */
    using System;
    using System.Collections;
    struct Person
    {
        
    private string _name;
        
    public Person(string name)
        {
            _name
    =name;
        }
        
    public string Name
        {
            
    get { return _name; }
            
    set { _name=value; }
        }
    }
    class Test
    {
        
    static void Main()
        {
            ArrayList arr
    =new ArrayList();
            Person p
    =new Person("張三");
            arr.Add(p);
    //把結構體裝放數組中的時候會進行裝箱操作
            p.Name="李四";
            Console.WriteLine(p.Name);
            Console.WriteLine(((Person)arr[
    0]).Name);
        }
    }

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    71. Simplify Path
    68. Text Justification
    65. Valid Number
    64. Minimum Path Sum
    More Effective C++ 条款12 了解”抛出一个exception"与“传递一个参数”或“调用一个虚函数”之间的差异
    More Effective C++ 条款11 禁止异常流出destructor之外
    More Effective C++ 条款10 在构造函数内阻止内存泄露
    More Effective C++ 条款9 利用 destructor 避免泄露资源
    More Effective C++ 条款7 千万不要重载&&,||和,操作符
    More Effective C++ 条款6 区别 increment/decrement 操作符的前置(prefix)和后置(postfix)形式
  • 原文地址:https://www.cnblogs.com/Athrun/p/1283630.html
Copyright © 2011-2022 走看看