1.ref关键字
我们知道C#语言的数据类型分为值类型和引用类型,其中它们最典型的差别就是在作为方法的参数方面。值类型数据作为参数,修改形参时不会影响到实参;而引用类型数据作为参数,修改形参可以影响到实参。
但是某些情况下,传递的是值类型数据,却要求把修改的结果带回来,像引用类型作为参数那样的效果,怎么办?在C#语言中,ref关键字就可以达到这样的效果。ref关键字使实参按引用类型传递,其效果是,当控制权传递回调用方法时,在方法中对形参的任何更改都将反映在该实参中。下面来看一个例子:
//定义一个ref形参的方法
static void Method(ref int i)
{
i = 44;
}
//在Main方法中调用上面定义的ref形参方法
static void Main(string[] args)
{
int val = 0;
Method(ref val); //执行完方法,变量val的值是44
Console.WriteLine("val值是:" + val.ToString()); //此时输出结果是: “val值是:44”
}
ref关键字使整型变量val按照引用类型方式传递给Method方法,在Method方法中把参数 i 修改成了 44 ,因为是按引用传递,所以这时变量val的值就变成了 44 。同时要注意的是,若要使用ref参数,则方法定义和调用方法都必须显式使用ref关键字。
2.out关键字
out关键字和ref关键字非常相似,都会导致参数按照引用方式传递。下面的示例演示了out关键字的方法:
//定义一个out形参的方法
static void Method(out int i)
{
i = 44;
}
//在Main方法中调用上面定义的out形参方法
static void Main(string[] args)
{
int val;
Method(out val); //执行完方法,变量val的值是44
Console.WriteLine("val值是:" + val.ToString()); //此时输出结果是: “val值是:44”
}
需要说明的是,若要使用out参数,方法定义和调用方法都必须显式使用out关键字。大家感觉和ref关键字一模一样,都是把实参按照引用类型方式传递,都需要在方法定义和调用方法时使用关键字。但是他们有一个非常重要的区别,仔细对比ref的示例和out的示例就会发现,ref的示例中变量val在调用方法前赋值了,而out示例中变量val在调用方法之前没有赋值。这就是它们语法上的区别,传递到ref的参数必须最先初始化。而out则不同,out的参数在传递之前不需要初始化。
还有一点需要说明,尽管作为out参数传递的变量不必在传递之前进行初始化,但需要调用方法在方法返回之前赋值。也就是说,上面示例中的Method方法必须在执行完以前对变量 i 进行赋值。
两个关键字语法相似,这里对ref和out进行一个总结,ref关键字重在修改参数的数据,而out关键字重在带回执行结果。
标签:val,C#,ref,44,关键字,方法,out From: https://www.cnblogs.com/YDSLM/p/17387252.html