关于值类型与引用类型,值传递与引用传递的归纳,总结一下,分享给大家:
一、值类型与引用类型
1.堆栈中的存放:
<1>值类型默认存放在栈中,但当值类型是在引用类型中声明的时候,则存放在其所在的引用类型的堆中。
<2>引用类型存放在堆中,其在堆中的内存地址放在栈中。
2.参数传递方式:
<1>值类型参数可以值传递,也可以通过ref、out关键字修饰,进行引用传递。
<2>引用类型参数只能以引用传递方式传递。
二、值传递与引用传递
1.值传递
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
代码如下:
class Program
{
public static void Main(string[] args)
{
int a = 1;
Test(a);
Console.WriteLine(a);
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
//值传递
static void Test(int a)
{
a++;
}
}
结果:1
2.引用传递
引用传递:也称为传地址。方法调用时,实际参数是对象(或者数组),这是实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际是就是对实际参数的操作,这个结果在方法结束后,被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。
代码如下:
class Program
{
public static void Main(string[] args)
{
int a = 1;
Person p=new Person{Age=20};
//通过ref关键字,对值类型变量a进行引用传递
Test(ref a,p);
Console.WriteLine(a);
Console.WriteLine(p.Age);
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
//引用传递
static void Test(ref int a,Person p)
{
a++;
p.Age++;
}
}
class Person
{
public int Age{get;set;}
}
结果:2
作者:Roger_CoderLife
链接:https:blog.csdn.net/Roger_CoderLife/article/details/81563761
本文为Roger_CoderLife的原创文章,著作权归作者所有,转载请注明原文出处,欢迎转载!