摘要:
引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱。文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆;最后介绍值类型和引用类型,并说明一些有关它们的重要原理。 最后通过一个简单的示例代码说明装箱拆箱带来的性能损耗。声明变量的内部机制 在.NET程序中,当你声明一个变量,将在内存中分配一块内存。这块内存分为三部分:1,变量名;2,变量类型;3,变量值。 下图揭示了声明一个变量时的内部机制,其中分配的内存类型依据你的变量类型。.NET中有两种类型的内存:栈内存和堆内存。在接下来的内容中,我们会了解到这两种类型的详细内容。... 阅读全文
摘要:
System.Collections.ArrayList 就是我们常说的动态数组,也是我们常用的 "数据类型" 之一。在 MSDN 上是这样表述的:使用大小可按需动态增加的数组实现 IList 接口。我来解释一下,就是:一个可以根据需要动态增加使用大小并可按照索引单独访问的对象的非泛型集合。一般人都认为 ArrayList 就是一个 "纯动态" 的数组,与 <数据结构> 中 "链表" 的原理一样。在对 ArrayList 做深入探究和学习之前,我也是这么认为的。可是,事实并非如此。在 ArrayList 内部有一个 Obj 阅读全文
摘要:
无论你所使用的是哪种编程语言,我们都不得不承认这样一个共识:string是我们使用最为频繁的一种对象。但是string的常用性并不意味着它的简单性,而且我认为,正是由于string的频繁使用才会促使其设计人员在string的设计上花大量的功夫。所以正是这种你天天见面的string,蕴含了很多精妙的设计思想。一个月以前我写了一篇讨论 字符串的驻留 (string interning)的文章,我今天将会以字符串的驻留为基础,进一步来讨论.NET中的string。string interning的基本前提是string的恒定性(immutability),即string一旦被创建将不会改变。我们就先 阅读全文
摘要:
System.String 类型一直是我们不断讨论的话题,它是一个用于对字符串进行存储和操作的这么一个类型。System.String 也是 C# 基础类型中唯一的引用类型。但是,它却具有很多值类型的特点。我们来看一段简单的代码:1 string text = "White";2 string temp = text;3 temp = "Black";4 Console.WriteLine(text);5 Console.ReadKey();按照引用的理论,此处 temp 变量应该是存储的 text 变量的地址,那么修改 temp 变量的值,text 的 阅读全文