欢迎访问宙启技术站
智能推送

C#中ref和out如何使用

发布时间:2023-05-14 03:01:23

ref和out是C#中的两种关键字,用于函数参数传递时的值传递和引用传递。

ref是reference(引用)的缩写,表示参数传递时使用引用传递,即函数内对参数值的修改会影响函数外的参数值。在函数声明时,在参数类型前加上ref关键字即可定义一个引用类型的参数。例如:

void Swap(ref int a, ref int b)
{
    int temp = a;
    a = b;
    b = temp;
}

int x = 1;
int y = 2;
Swap(ref x, ref y);
Console.WriteLine(x);   // 输出 2
Console.WriteLine(y);   // 输出 1

在上面的例子中,函数Swap的两个参数都是引用类型的int,使用了ref关键字定义。在函数内部,改变了参数a和b的值,这也会改变函数外部的x和y的值。

out同样可以用于引用传递,但是与ref不同的是,out关键字要求函数内必须初始化传递的参数,因为在使用out传递参数时,被传递的变量原本的值会被忽略,并且要求函数内部一定要给传递的参数赋值。例如:

bool TryParse(string s, out int result)
{
    result = 0;
    foreach (char c in s)
    {
        if (!char.IsDigit(c))
        {
            return false;
        }
        result = result * 10 + (c - '0');
    }
    return true;
}

int num;
bool success = TryParse("123", out num);
Console.WriteLine(success);   // 输出 True
Console.WriteLine(num);       // 输出 123

在上面的例子中,函数TryParse的第二个参数是一个out类型的int。在函数内部,对传递的参数result进行了赋值,并且将该值作为返回值返回给函数外部。而在函数外部,对这个参数num的初始值并不需要进行赋值,但是num必须作为参数传递给函数,因为函数内部会将其赋值。

总而言之,ref和out关键字在函数参数传递时使用引用传递,而不是值传递。使用ref表示函数内部可以修改函数外部的参数值,并且函数外部也必须初始化参数;使用out表示函数内部必须给参数赋值并且返回值,而且函数外部不需要进行初始化。