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);
    }
}
posted @ 2008-09-04 09:53  Athrun  阅读(455)  评论(0编辑  收藏  举报