C#中的数据类型分为值类型和引用类型,他们最典型的差别就是在作为方法的参数方面
**值类型数据作为参数,修改形参时不会影响到实参
而引用类型数据作为参数,修改形参可以影响到实参**
某些情况下,传递的是值类型的数据,却要求把修改的结果带回来,
像引用类型作为参数那样的效果,ref关键词就可以达到这样的效果
ref关键字使实参按引用类型传递,其效果是,当控制权传递回调用方法时,在方法中对形参的任何更改都将反映在该实参中
下面来看一个例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
int val = 0;
Method(ref val);
//执行完上面的方法,变量val的值变为21
Console.WriteLine("val的值为:"+val.ToString());
}
static void Method(ref int i)
{
i = 21;
}
}
}
要注意的是,要使用ref关键字,方法的定义和调用都必须显式地使用ref关键字(out也是)
下面来演示一下out关键字的使用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
int val;
Method(out val);
//执行完上面的方法,变量val的值变为21
Console.WriteLine("val的值为:"+val.ToString());
}
static void Method(out int i)
{
i = 21;
}
}
}
大家是不是觉得两种关键字的使用方法很相近,但是你仔细看就会发现
ref的示例中变量val在调用方法前就赋值了,而out却没有,这就是他们的区别:
**传递到ref的参数必须事先初始化,而out则不用(out的参数在传递之前不需要初始化)
ref关键字重在修改参数的数据,而out关键字重在带回执行结果**