总的来说值参数和引用参数都是一种参数传递的方式。
本质上:值参数传递就是将实参的值复制给形参,而引用参数就是将形参直接当做实参的别名。
从内存分配上也可以看出
值参数:在栈中为形参分配空间内存后,将实参的值复制给形参。
引用参数:在栈上不会分配空间内存,形参将作为实参变量的别名,并指向相同的内存位置。
两者的区别:
值参数:未使用过ref或out修饰符的参数、
引用参数:在方法的声明和调用中都使用ref
注意点:
在变量在用作实参之前,必须要被赋值。如果是引用类型变量,可以赋值为一个引用或null
值参数例子:
class Program
{
static void Main(string[] args)
{
Text A = new Text();
int B = 5;
Way(A, B);//实参
Console.WriteLine("A.a:{0},B:{1}",A.a,B);
Console.ReadLine();
}
static void Way(Text num1, int num2)//形参
{
num1.a = num1.a + 3;
num2 = num2 + 6;
Console.WriteLine($"num1.a:{num1.a},num2:{num2}");
}
}
class Text
{
public int a = 20;//引用类型
}
引用参数例子
class Program
{
static void Main(string[] args)
{
Text A = new Text();
int B = 5;
Way(ref A,ref B);//实参
Console.WriteLine("A.a:{0},B:{1}",A.a,B);
Console.ReadLine();
}
static void Way(ref Text num1,ref int num2)//形参
{
num1.a = num1.a + 3;
num2 = num2 + 6;
Console.WriteLine($"num1.a:{num1.a},num2:{num2}");
}
}
class Text
{
public int a = 20;//引用类型
}