.NET中ref和out参数的区别是什么?在什么情况下,一个会比另一个更有用?一个可以使用而另一个不能使用的代码片段是什么?


当前回答

c#中的out和ref参数有一些很好的例子。

基本的区别是传入out参数时不需要初始化,而ref参数需要初始化。

其他回答

c#中的out和ref参数有一些很好的例子。

基本的区别是传入out参数时不需要初始化,而ref参数需要初始化。

Ref可能会在null时阻塞,因为它可能期望修改一个现有对象。Out需要null,因为它返回一个新对象。

out:

在c#中,一个方法只能返回一个值。如果希望返回多个值,可以使用out关键字。out修饰符返回为引用返回。最简单的答案是使用关键字“out”从方法中获取值。

您不需要在调用函数中初始化该值。 必须在被调用的函数中赋值,否则编译器将报错。

ref:

在c#中,当你将一个值类型,如int, float, double等作为参数传递给方法参数时,它是按值传递的。因此,如果修改形参值,它不会影响方法调用中的实参。但是,如果您用“ref”关键字标记参数,它将反映在实际的变量中。

在调用函数之前,需要初始化变量。 为方法中的ref参数赋值不是强制的。如果不更改值,为什么需要将其标记为“ref”?

out在c# 7中获得了新的更简洁的语法 https://learn.microsoft.com/en-us/dotnet/articles/csharp/whats-new/csharp-7#more-expression-bodied-members 更令人兴奋的是c# 7的元组增强,这是一个比使用ref和out更优雅的选择。

Ref和Out参数:

out和ref参数用于在同一个变量中返回值,您可以将其作为方法的参数传递。当您的方法需要返回多个值时,这两个参数非常有用。

必须在calee方法体中为out参数赋值,否则该方法将无法编译。


参考参数:它必须在传递给方法之前初始化。 方法参数上的ref关键字使方法引用作为同一方法输入参数传递的相同变量。如果您对变量做了任何更改,这些更改将反映在变量中。 int sampleData = 0; sampleMethod (ref sampleData);

Ex of Ref参数

public static void Main() 
{ 
 int i = 3; // Variable need to be initialized 
 sampleMethod(ref i );  
}

public static void sampleMethod(ref int sampleData) 
{ 
 sampleData++; 
} 

Out参数:在传递给Method之前不需要初始化。 out参数可用于返回作为方法参数传递的同一个变量中的值。对参数所做的任何更改都将反映在变量中。 int sampleData; sampleMethod (sampleData);

Out参数的Ex

public static void Main() 
{ 
 int i, j; // Variable need not be initialized 
 sampleMethod(out i, out j); 
} 
public static int sampleMethod(out int sampleData1, out int sampleData2) 
{ 
 sampleData1 = 10; 
 sampleData2 = 20; 
 return 0; 
}