C#值类型和装箱

      前几日闲逛C# Corner
http://www.c-sharpcorner.com/网站(很有信誉的),发现一篇不错的稿子,图文并茂的办法讲解了C#的值类型以及值类型调用GetType时候,或者值类型被投入到ArrayList时候发出的装箱进程。这篇小说能支持您对值类型的装箱进程,以及在经过引用如接口、委托或ArrayList来拍卖值类型时应小心些什么有更好的了然,那里记录下来和恋人们享受分享:

      当一个值类型实例被更换成System.Object类型或是接口时,CLR需求把值类型转换成一个正好的引用类型。然后在托管堆上分配内存并将对象拷贝上去。我们之所以要打听它,有七个原因:装箱是一个很是开支资源的经过(将所有对象从栈上拷贝到堆上会花费处理器的周期以及托管空间),我们因此(装箱)而有了多个在内存可以有互动争执状态的对象。

      文章就不粘贴到这里了,那里加一个链接地址:方便作为查询及记录:

http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_boxing02122006144943PM/csharp_boxing.aspx

 

   
须求更加注意一下:当调用ToString()方法时候,不再而三发生装箱操作,它依靠于值类型的求实完成。加入那值类型重写了ToString()方法,编译器将从来调用这生成的IL代码而不用爆发装箱操作。超过一半的.Net的BCL(Base
Class Libraries)或FCL(Framework Class
Libraries)值类型,像Int32重写了ToString()方法,所以当

Int32 count=10;

string strcount=count.ToString();//没有进展装箱操作

C#,而对此object.GetType()方法,它不是一个虚方法,所以值类型不可知提供任何达成,当调用GetType()将连接会爆发装箱操作。

 

Best Regards,

Charles

相关文章