常见面试题目: 1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还是值类型?enum.int[]和string呢? 4. 堆和栈的区别? 5. 什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗? 6.“结构”对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗? 7. 理解参数按值传递?以及按引用传递? 8. out 和 ref 的区别与相同点? 9. C#支持哪几个预定义的值类型?C#支持哪些预定义的引用类型? 10. 有几种方法可以判定值类…
本文主要是讨论栈和堆的含义,也就是讨论C#的两种类据类型:值类型和引用类型: 虽然我们在.net中的框架类库中,大多是引用类型,但是我们程序员用得最多的还是值类型. 引用类型如:string,Object,class等总是在从托管堆上分配的,C#中new操作符返回对象的内存地址--也就是指向对象数据的内存地址.   以下是值类型与引用类型的表:    我们来看下面一段代码:     首先在类中声明一个class类,和一个struct结构,如图:   并使用在程序入口调用它们,如图:     现在…
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace P01Method { class Program { static void Main(string[] args) { //int a1 = 11; //int b2 = 22; //Add2Num(a1, b2);//在调用方法时,为 方法括号中 传递的 值 就叫做 实参(实际参数) //Add2Nu…
程序运行时,它的数据必须存储在内存中,数据项需要多大的内存.存储在什么地方以及如何存储都依赖该数据项的类型 运行中的程序使用两个区域来存储数据:栈和堆 栈是一个内存数组,是一个LIFO(last in first out后进先出)的数据结构 栈存储几种类型的数据: 某些类型变量的值 程序当前执行环境 传递给方法的参数 栈有以下几大特征 数据只能从栈的顶端插入和删除 把数据放到栈顶端称为入栈push 从栈顶删除数据称为出栈pop 堆是一块内存区域,在队里可以分配大块的内存用于存储某类型的数据. 与…
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存储位置的不同会有不同的影响. 例如int类型是值类型:int x,y; x=10;y=x;y=20;前三个语句会在内存的两个地方存储值10.改变y的值不会影响x. 如果已经定义了一个类Test,Test是一个引用类型,有一个int类型的成员变量value,执行完如下代码后,只有一个Test对象.x和…
命名空间可以认为类是属于命名空间的. 解决类的重名问题,可以看做类的“文件夹”如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间.1).用鼠标去点2).alt+shift+F103).记住命名空间,手动的去引用 在一个项目中引用另一个项目的类第一步------添加引用第二步------引用命名空间namespace 值类型和引用类型区别:1.值类型和引用类型在内存上存储的地方不一样.2.在传递值类型和传递引用类型的时候,传递的方式不一样.   值类型我们称之为值传递,引…
这个主题很重要,在.NET中做的一切其实都是在和一个值类型或者引用类型打交道. 现实世界中的值和引用 假定你在读一份非常棒的东西,希望一个朋友也去读他.于是你到复印室里复印了一份.这个时候他获得了属于他自己的一份完整副本.在这种情况下,我们处理的是值类型的行为.你和你朋友是各自独立的.你可以在自己的上面加一些注释,他的报纸不会改变. 再假定你在qq空间里发表了一篇日志,你想让朋友看到,这一次,你唯一需要给你朋友的是你qq空间日志所在的url地址.这就是引用类型的行为.当你修改你的日志时,你的朋友…
上周末回家去享受生活了, 工作是为了更好的生活嘛, 所以我把生活, 工作分的比较开. 这几天不是很忙, 在学习工作技能的同时, 发点博文, 也算是做一个学习笔记 上篇中, 贴出的地址里面那位哥, 也有一篇值类型和引用类型的文章 来源:http://www.cnblogs.com/yingql/archive/2009/03/23/1420026.html 我这个和他的那个稍有不同, 各位看官, 请! 一.示例 public class Person { public string Name {…
前言 之前对几个没什么理解,只是简单的用过可空类型,也是知道怎么用,至于为什么,还真不太清楚,通过整理本文章学到了很多知识,也许对于以后的各种代码优化都有好处. 本文的重点就是:值类型直接存储其值,引用类型存储对值的引用,值类型存在堆栈上,引用类型存储在托管堆上,值类型转为引用类型叫做装箱,引用类型转为值类型叫拆箱. 这一句话概括起来很简单,可是真正的理解起来却没那么简单,对于我来说吧. 值类型和引用类型 C#值类型数据直接在他自身分配到的内存中存储数据,而C#引用类型只是包含指向存储数据位置的…
为了明白什么是值类型和引用类型,先引入你两个概念.堆内存与栈内存   堆内存与栈内存   由于咱的描述能力有限,就不对其下定义了,来看看两者的作用.   共同点: 都是用来存放数据的   不同点: 堆内存:堆允许程序在运行时动态的申请某个大小的内存空间,用于存放对象的实例.换句话说,堆用于存放由new创建的对象和数组. 栈内存:主要用来存储局部变量的值.局部变量包括各种基本类型的变量,像int,char等,还包括对象的引用变量.   值类型和引用类型   有如下代码: int n = 1; Pe…