关于C#中给引用类型加上“REF”后有什么不同

来源:百度知道 编辑:UC知道 时间:2024/05/14 16:42:37
对于“值类型”加上后,那么传递给函数时就是传递地址
那么对于“引用类型”呢 ? 它本来就是传递的地址,为什么还要加上REF。
如下例:
using System;

namespace Text
{
public class Starter
{
public static void Main(String[] args)
{
int[] zArray = { 1,2,3,4};
Array.Resize<int>(ref zArray, 8);
foreach (int number in zArray)
{
Console.WriteLine(number);
}
Console.ReadKey();
}
}
}
应该不是这样的。我的一本书上有解释。可是就是没有看明白

ref关键字传递栈地址
引用类型传递的是堆地址
如果你把ref 使用到引用类型上那么就会把引用类型的地址传递过去
而不是把引用类型应用的堆地址传递过去
引用类型:他的引用是存储在栈地址 他的值存储在堆地址 引用里边的值就是他堆的地址
值类型:值存储在栈地址
如果你先把一个引用类型当作值类型看
那么他的值就是他所引用的地址

所以如果一个引用类型加上Ref 那就可以在被调用函数中修改传递哪个参数的
对象
void main()
{
A a=new A();
a.b="c";
Main1(a);
Console.WriteLine(a.b);
}
void Main1(ref A a)
{
a=new A();//这个时候上边的A已经不是以前的A了
}

(楼上说得好)