随笔分类 - C#
摘要:首先,我们要知道的是String类型是一个引用类型,它的基类是Object。并且它的内容是只读的。我们有时候经常会看到两个字符串类型,一个是“Sting”,一个是“string”。大写的String是System.String,也就是 公共语言规范(Common Language Specification) CLS 所定义的字符串类型;小写的string则是C#自己的字符串类型;最终C#编译器还是会把它和System.String联系起来。例如:string a = "a";a = "abc";我们来简单分析下这两段代码:1.第一段代码,首先会在托管堆
阅读全文
摘要:前一篇我们浅谈了“堆”和“栈”,这篇文章我们主要谈一下值类型和引用类型在作为参数传递时候,有什么不同。主要分为两种情况:1.传递值类型(Passing Value Types)2.传递引用类型(Passing Reference Types)首先我们来看一下第一种情况,传递值类型(Passing Value Types):public void Go(){ var x = 5; AddFive(x); Console.WriteLine(x.ToString());}public int AddFive(int pValue){ pValue += 5; ...
阅读全文
摘要:首先,让我们来简单了解一下什么是“栈”(stack),什么是“堆”(heap)。“栈”其实就是一种后入先出(LIFO)的数据结构。在我们.NET Framework里面,由CLR负责管理,我们程序员不用去担心垃圾回收的问题;每一个线程都有自己的专属的“栈”。“堆”的存放就要零散一些,并且由 Garbage Collector(GC)执行管理,我们关注的垃圾回收部分,就是在“堆”上的垃圾回收;其次就是整个进程共用一个“堆”。我们先来记住两条黄金法则:1.引用类型总是被分配到“堆”上。2.值类型总是分配到它声明的地方: a.作为引用类型的成员变量分配到“堆”上 b.作为方法的局部变量时分配到“栈”
阅读全文