ref和out的区别
ref与Out
1.out和ref 关键字会导致参数通过引用来传递
2. ref要求变量必须在传递之前进行初始化
3.尽管作为 out 参数传递的变量不必在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值
4.ref 和 out 关键字在运行时的处理方式不同,但在编译时的处理方式相同
5.个人理解:out可以使用在我们不知道某个变量的值,但调用某方法后这个值会改变,并且不希望通过方法返回的方式来获取改变的值的情况。
特别是我们是返回多个参数类型时(而这些参数没有组成一个Model类型时),因为retun往往值返回一个参数类型,这时out很好了.而且个人认为
out不适合用于数的交换,而ref可以用于变量的交换
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RefOutTest
{
class Program
{
//ref与Out
//1.out和ref 关键字会导致参数通过引用来传递
//2. ref要求变量必须在传递之前进行初始化
//3.尽管作为 out 参数传递的变量不必在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值
//4.ref 和 out 关键字在运行时的处理方式不同,但在编译时的处理方式相同
//5.个人理解:out可以使用在我们不知道某个变量的值,但调用某方法后这个值会改变,并且不希望通过方法返回的方式来获取改变的值的情况。
// 特别是我们是返回多个参数类型时(而这些参数没有组成一个Model类型时),因为retun往往值返回一个参数类型,这时out很好了.而且个人认为
// out不适合用于数的交换,而ref可以用于变量的交换
static void Main(string[] args)
{
int a=5, b=6;
Change(a, b);
Console.WriteLine("a={0},b={1}", a, b);
ChangeByRef(ref a,ref b);
Console.WriteLine("a={0},b={1}", a, b);
ChangeByOut(out a, out b);
Console.WriteLine("a={0},b={1}", a, b);
Console.ReadKey();
}
private static void Change(int x, int y)
{
int c = 0;
c = x;
x = y;
y = c;
}
private static void ChangeByRef(ref int x,ref int y)
{
int c = 0;
c = x;
x = y;
y = c;
}
private static void ChangeByOut(out int x, out int y)
{
//这里的x和y要先赋值,否则编译报错
//x=0;
//y=0;
int c = 0;
c = x;
x = y;
y = c;
}
}
}
浙公网安备 33010602011771号