码迷,mamicode.com
首页 > Windows程序 > 详细

EffectiveC#17--装箱和拆箱的最小化

时间:2015-10-19 23:56:04      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

1.如下这段代码会经历装箱和拆箱。例如25会先装箱成object后传递给writeline方法(一次拷贝),在方法内部又

经历拆箱成int(第二次拷贝)后然后调用tostring().

Console.WriteLine("A few numbers:{0}, {1}, {2}", 25, 32, 50);

 所以建议这种写法:只经历一次装箱

Console.WriteLine("A few numbers:{0}, {1}, {2}", 25.ToString(), 32.ToString(), 50.ToString());

 规则一:隐式需要object‘类型时,值类型先装箱。 

2.在使用.Net 1.x的集合时,当你添加一个值类型数据到集合时中,你就创建了一个箱子。任何时候从集合中移出一个对象时,你得到的是箱子里的一个拷贝

struct Person
{........}
// Using the Person in a collection: 
ArrayList attendees = new ArrayList( ); 
Person p = new Person( "Old Name" ); 
attendees.Add( p ); 
// Try to change the name:   Would work if Person was a reference type.
Person p2 = (( Person )attendees[ 0 ] ); 
p2.Name = "New Name"; 
// Writes "Old Name": 
Console.WriteLine( attendees[ 0 ].ToString( ));

  此段代码有3处拷贝。Person是一个值类型数据,在存储到ArrayList之前它被装箱。这会产生一个拷贝。而在移出的Persone对象上通过访问属性做一些修改时,另一个拷贝被创建。而你所做的修改只是针对拷贝,而实际上还有第三个拷贝通过ToString()方法来访问attendees[0]中的对象。

EffectiveC#17--装箱和拆箱的最小化

标签:

原文地址:http://www.cnblogs.com/tiantianle/p/4893364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!