ref==reference引用,指针,地址 ref是输入参数:
虽然形参的数据类型是值类型,但添加ref关键字,实参向形参传递的不再变量值,是变量地址。向ref形参传递参数时,实参必须初始化。ref 传入的变量必须初始化,但是在内部 可改可不改
public void Method2(ref int a, ref bool flag)
{
a = 100;
flag = true;
Console.WriteLine($"值类型修改后的值:a={a},flag={flag}");
}
向ref形参传递参数时,实参必须初始化
Class1 cls = new Class1();
int x = 1;
bool f = false;
cls.Method1(x, f);
out输出参数:方法的返回值只能有一个,通过return返回。
方法输出的结果可以有多个,return只是返回结果的一种方式,而输出参数out是另外一种方式。输出参数在方法内必须赋初值。即:out 传入的变量不用初始化,但是在内部 必须修改该值向out形参传递参数时,实参不必初始化。
public int Method3(int a, out string x, out long y, int z)
{
x = "hello world";
y = 200;
return 100;
}
向out形参传递参数时,实参不必初始化
string xx = "abc";
long yy = 100;
int result = cls.Method3(0, out xx, out yy, 0);
in和out最大不同,in传递过来的参数,不能修改。而out必须修改。ref想改就改,不想改不改。in传递过来的参数是只读的。
public string Method4(int a, in string x, in long y, int z)
{
//x = "hello world"; // 报错
//y = 200;
return x + 100 + y;
}
向in形参传递参数时,必须初始化。由于方法不让修改in形参,所以实参不受影响
string xxx = "abc";
long yyy = 100;
string result1 = cls.Method4(0, in xxx, in yyy, 0);