/*
* 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);
}
}