C# 中的 Out 和 Ref 及Params 参数

out 和ref 参数 经常用来通过方法传递参数来获取值,当您的方法不只有一个返回值的时候,这两个参数就发挥作用了。ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点。 
在这篇文章里,我将解释如何在c#应用中使用这两个参数。
 
1out 参数
 
out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
 
public class mathClass
{
public static int TestOut(out int iVal1, out int iVal2)
{
    iVal1 = 10;
    iVal2 = 20;
    return 0;


public static void Main()
{
    int i, j; // variable need not be initialized 
    Console.WriteLine(TestOut(out i, out j));
    Console.WriteLine(i);
    Console.WriteLine(j);
}
}
 
2ref 参数
 
ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。 

static void Main(string[] args)
{
// Ref sample 

   int refi; // variable need be initialized 
   refi = 3
   RefTest(ref refi); 
   Console.WriteLine(refi); 
   Console.ReadKey(); 



public static void RefTest(ref int iVal1) 

   iVal1 += 2
}
 
 ref和out参数的区别
  
使用ref前必须对变量赋值,out不用。 

out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改。
 
3params 参数
params 关键字可以指定在参数数目可变处采用参数的方法参数。
在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。
using System;

class App
{
    public static void UseParams(params object[] list)
    {
        for (int i = 0; i < list.Length; i++)
        {
            Console.WriteLine(list[i]);
        }
    }

    static void Main()
    {
        // 一般做法是先构造一个对象数组,然后将此数组作为方法的参数
        object[] arr = new object[3] { 100'a'"keywords" };
        UseParams(arr);

        // 而使用了params修饰方法参数后,我们可以直接使用一组对象作为参数
        
// 当然这组参数需要符合调用的方法对参数的要求
        UseParams(100'a'"keywords");

        Console.Read();
    }

 
原文地址:https://www.cnblogs.com/51net/p/2535236.html