C#中的传值调用和传引用调动。
传值调用是指在使用参数时,是把一个值传递给函数使用的一个变量。对函数中此变量的任何修改都不影响函数调用中指定的参数。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int myNumber = 5;
Console.WriteLine("myNumber = {0}", myNumber);
ShowDouble(myNumber);
Console.WriteLine("myNumber = {0}", myNumber);
Console.ReadKey();
}
static void ShowDouble(int val)
{
val *= 2;
Console.WriteLine("val doubled = {0}", val);
}
}
}
返回结果:
传引用调用,即参数带有ref或out关键字。对函数中这个变量进行的任何改变都会影响用作参数的变量值。
对于带有ref关键字:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int myNumber = 5;
Console.WriteLine("myNumber = {0}", myNumber);
ShowDouble(ref myNumber);
Console.WriteLine("myNumber = {0}", myNumber);
Console.ReadKey();
}
static void ShowDouble(ref int val)
{
val *= 2;
Console.WriteLine("val doubled = {0}", val);
}
}
}
返回结果:
注意:
1.带有ref的参数不能定义为“常变量”,即const int myNumber = 5;
2.带有ref的参数必须在使用前进行初始化。
对于带有out关键字:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int myNumber;
ShowDouble(out myNumber);
Console.WriteLine("myNumber = {0}", myNumber);
Console.ReadKey();
}
static void ShowDouble(out int val)
{
val = 5;
val *= 2;
Console.WriteLine("val doubled = {0}", val);
}
}
}
返回结果:
注意:
带有out关键字的参数,必须看作是还未赋值,即使把已赋值的变量作为out参数时,存储在变量中的值也会在函数执行时丢失。