-
c#语法学习之装箱box与拆箱unbox
/*
//問題:上面的程序會進行幾次裝箱和拆箱.
*CreatedbySharpDevelop.
*User:Administrator
*Date:2008/9/4
*Time:上午12:10
*
*/
usingSystem;
classTest
{
staticvoidMain()
{
inti=123;//第一次裝箱
objecto=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);輸出結果一致.這時候進行了一次裝箱
/*
*CreatedbySharpDevelop.
*User:Administrator
*Date:2008/9/4
*Time:上午12:27
*裝箱和拆箱的性能問題:
*Box和Unbox處理是大量耗用咚阗Y源的處理序。當實值型別經Box處理時,必須建立全新的物件。這個過程需要的時間可能是指派的20倍。執行Unbox處理時,轉換處理序所需的時間可能是指派的四倍。
*上面這句是MSDN的說法,因此在實際編程中我們要盡能避免裝箱和拆箱操作.
*/
usingSystem;
usingSystem.Collections;
structPerson
{
privatestring_name;
publicPerson(stringname)
{
_name=name;
}
publicstringName
{
get{return_name;}
set{_name=value;}
}
}
classTest
{
staticvoidMain()
{
ArrayListarr=newArrayList();
Personp=newPerson("張三");
arr.Add(p);//把結構體裝放數組中的時候會進行裝箱操作
p.Name="李四";
Console.WriteLine(p.Name);
Console.WriteLine(((Person)arr[0]).Name);
}
}