C#中有两种类型的数据,一种为值类型;另一种为引用类型。
值类型:int、char、float、long、bool、double、struct、enum、short、byte、decimal、sbyte、uint、ulong、ushort等
引用类型:string、class、interface、delegate、object等
他们最大的区别就是存储的位置不同,前者值类型存储在内存的栈,后者存储在内存堆中,栈中的内存不需要自己就能回收,堆中的数据需要.Net FrameWork 自己的内存清理机制进行回收。
实参传递的是值,形参传递的是地址。实参传递打个比方:我电脑有一个文件,你用U盘来拷贝我的这个文件,那么拷贝后你把文件放在你的电脑里进行任何的修改,都不会影响到我电脑里这个文件的内容
-------它们占用的是两个不同的内存空间(你的电脑和我的电脑).形参传递打个比方,比如你电脑桌面上有一个txt文件,然后你再创建这个txt文件的快捷方式,接着你对这个快捷方式的txt文件内容做任何修改,那么原来的txt文件
内容也会同时被更改--------他们占用的是同一个内存空间(你的电脑).
举个例子:
对于这个函数void func(int n) 这属于值传递,调用func(i)的时候,会把i拷贝一个副本,然后把这个副本传给func函数。func函数里面的n,和外面的i,就完全没有关系了。所以修改n不影响ivoid func(ref int n)这属于引用传递,调用func(ref i)的时候,直接把i的地址传给func函数。func函数里面的n,和外面的i,完全就是同一个地址的同一个变量 |
新闻热点
疑难解答