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;
}
}
}

 

posted @ 2012-02-23 19:05  焦涛  阅读(581)  评论(0)    收藏  举报