参数修饰符out 和 ref的区别

out  ———— 一个引用传递

1、如果一个方法中的变量在使用out作为参数时,在方法中对out参数所作的更改都会反映到该变量。

static void Method(out int iValue)
{
iValue = 44;
}
static void Main()
{
int a; //不必初始化 Method(out a);//显示使用out关键字 Console.WriteLine(a);//a is now 44 }

2、若要使用out参数,方法定义以及方法的调用都必须显示使用out关键字;

3、不必初始化作为out参数传递的变量,因为out参数在进入方法后清空自己,也因为这个原因必须在方法返回之前为out参数赋值。(只有地址没有值的参数是不能被.NET接受的)。ref要求变量必须在传递之前进行初始化。

ref ----- 仅仅是一个地址!

1、当一个方法在使用ref参数时,在方法中对ref参数所作的任何更改都将反映在该变量中。

static void Method(ref int iValue)
{
iValue = 44;
}
static void Main()
{
int a = 0; //必须初始化 Method(ref a);//显示使用ref关键字 Console.WriteLine(a);//a is now 44 }

2、如果使用ref参数,则必须将参数作为ref参数显示传递到方法。ref参数的值可以被传递到ref参数。

3、ref参数传递的变量必须初始化,因为ref参数在进入方法后还是它自己,它这个地址指向的还是原来的值,正因为这个原因ref参数可以在使用它的方法内部不操作。这与out不同,out的参数在传递之前不需要显示初始化。

out 和 ref示例

public static string TestOut(out string str)
{
str="out value";
return "hello world";
} public static void TestRef(ref string str)
{
str="ref value";
}
public static void TestNoRef(string refstr)
{
refstr = "no ref";
}
static void Main()
{
string outStr;
Console.WriteLine(TestOut(out outStr));//返回值 输出"return value" Console.WriteLine(outStr); //调用后的out参数输出"out value" string refStr;//必须初始化 TestRef(ref refStr);
Console.WriteLine(refStr); //调用后的ref参数输出"ref value" TestNoRef(refStr);//不使用ref Console.WriteLine(refStr); //仍然输出"ref value";没有变 }
posted @ 2009-08-17 11:45  坤坤  阅读(410)  评论(2编辑  收藏  举报