-
传值参数中—- 值类型
函数传递的是方法外的变量的副本,函数内的变量变化,不会影响函数外部的变量
static void Main(string[] args)
{
int a = 12;
Add(a);//打印出函数内部的a是13
Console.WriteLine(a);//打印出函数外部的a是12
Console.ReadKey();
}
static void Add(int a)
{
a++;
Console.WriteLine(a);
}
-
传值参数—-引用类型,在函数内部重新赋给变量值
当引用类型的变量传入函数后,在方法内部重新给参数赋值,外部变量和内部参数相互之间不会影响,这种情况一般很少见。
static void Main(string[] args)
{
List<int> list = new List<int>();
list.Add(1);
Add(list); //打印出来2
Console.WriteLine("函数外部的引用变量-------");
foreach (var item in list)
{
Console.WriteLine(item);
} //打印出来1
Console.ReadKey();
}
static void Add(List<int> list)
{
list = new List<int>();
list.Add(2);
Console.WriteLine("函数内部的引用变量-------");
foreach (var item in list)
{
Console.WriteLine(item);
}
}
-
传值参数—引用类型
当引用类型传入函数时,方法外部的变量和方法内部的参数的引用地址相同,指向同一个地址,在函数内部改变参数时,外部的变量也发生了变化。
static void Main(string[] args)
{
List<int> list = new List<int>();
list.Add(1);
Add(list);//打印出来1,2
Console.WriteLine("函数外部的引用变量-------");
foreach (var item in list)
{
Console.WriteLine(item);
} //也打印出来1,2
Console.ReadKey();
}
static void Add(List<int> list)
{
list.Add(2);
Console.WriteLine("函数内部的引用变量-------");
foreach (var item in list)
{
Console.WriteLine(item);
}
}
- 引用参数(ref修饰符)—值类型
引用参数并不创建变量的副本,引用参数和实际变量指向内存中同一个位置,
static void Main(string[] args)
{
int a0 = 1;
Add(ref a0);
Console.WriteLine("函数外部a:{0}",a0); //函数外部a:3
Console.ReadKey();
}
static void Add(ref int a)
{
a +=2;
Console.WriteLine("函数内部a:{0}", a);//函数内部a:3
}
- 引用参数(ref)—引用类型
引用类型并不创建变量的副本,变量和参数指向同一个地址,当参数地址改变后,变量地址也会跟着变化。
static void Main(string[] args)
{
string a0 = "Hello ";
Add(ref a0);
Console.WriteLine("函数外部a:{0}",a0); //函数内部a:Hello Word
Console.ReadKey();
}
static void Add(ref string a)
{
string a0 = a;
a += "Word";
Console.WriteLine("函数内部a:{0}", a);//函数外部a:Hello Word
}
- 比较传值参数和引用参数
比较上下文中两个函数,传值参数:在函数内部中改变参数的引用地址,外部变量的引用地址不会改变;引用参数:在函数内部改变参数的引用地址,外部变量地址也发生改变。即,传值参数使用的是变量的副本,而引用参数使用的是变量。
static void Main(string[] args)
{
string a0 = "Hello ";
Add( a0);
Console.WriteLine("函数外部a:{0}",a0); //函数外部a:Hello
Console.ReadKey();
}
static void Add( string a)
{
string a0 = a;
a += "Word";
Console.WriteLine("函数内部a:{0}", a);//函数内部a:Hello Word
}
版权声明:本文为weixin_41707267原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。