摘要:
为了便于文章的开展,首先介绍装箱(Boxing)和拆箱(Unboxing)这两个名词。.net的类型分为两种,一种是值类型,另一种是引用类型。这两个类型的本质区别,值类型数据是分配在栈中,而引用类型数据分配在堆上。那么如果要把一个值类型数据放到堆上,就需要装箱操作;反之,把一个放在堆上的值类型数据取出来,则需要进行拆箱操作。 例如,对于如下简单的装箱和拆箱操作语句。 int i = 123; ... 阅读全文
摘要:
我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。明白了这个本质区别,我们就不难看出下面的语句中static readonly和co... 阅读全文
摘要:
对和栈的主要的区别由以下几点: 1、管理方式不同; 2、空间大小不同; 3、能否产生碎片不同; 4、生长方向不同; 5、分配方式不同; 6、分配效率不同; 管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。 空间大小:一般来讲在32位系统下,堆内存可以达到4G的空间,从这个角度来看堆内存几乎是没有什么限制的... 阅读全文
摘要:
对于.NET的初学者来,一个很令人困惑的问题是:从高级语言(如C#和Visual Basic)到托管语言再到机器语言究竟是一个怎样的过程。掌握这个过程也是理解.NET语言互操作性(也就是语言独立性的核心原则)的关键,并且也关系到二进制兼容性的问题。尽管本书一直尝试不探讨这些的底层细节实现而主要集中讲述如何最好地应用.NET,然而对CLR产生代码过程有一个概览对理解她的内部机理还是大有益处的。不仅如... 阅读全文