您的位置:首页 > 编程语言 > C#

C#中的ref和out关键字

2015-11-05 11:16 441 查看
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关键字重在带回执行结果**
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: