C#中的参数修饰符 ref,out ,params

1. ref     

 在方法中对参数所做的任何更改都将反映在传入的变量中。
引用调用参数。就是说,这个传递的是参数的实际地址,当你的参数在方法中改变时,会影响到传进来的变量。
 
class RefExample
{
  static void Method(ref int i)
  {
  i = 44;
  }
  static void Main()
  {
  int val = 0;
  Method(ref val);
  // val is now 44
  }
}
 
 
2.out
    out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
例如:
class OutExample
{
    static void Method(out int i)
    {
        i = 44;
    }
    static void Main()
    {
        int value;
        Method(out value);
        // value is now 44
    }
}
 

尽管作为 out 参数传递的变量不必在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。

同样的 属性不是变量,因此不能作为 out 参数传递。

 

示例
当希望方法返回多个值时,声明 out 方法很有用。使用 out 参数的方法仍然可以将变量作为返回类型来访问,但它还可以将一个或多个对象作为 out 参数返回给调用方法。此示例使用 out 在一个方法调用中返回三个变量。请注意,第三个参数所赋的值为 Null。这样使方法可以有选择地返回值。
class OutReturnExample
{
    static void Method(out int i, out string s1, out string s2)
    {
        i = 44;
        s1 = "I've been returned";
        s2 = null;
    }
    static void Main()
    {
        int value;
        string str1, str2;
        Method(out value, out str1, out str2);
        // value is now 44
        // str1 is now "I've been returned"
        // str2 is (still) null;
    }
}

 

 

3.params

  params主要的用处是在给函数传参数的时候用,就是当函数的参数不固定的时候。

在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。

 

关于参数数组,需掌握以下几点。

  (1)若形参表中含一个参数数组,则该参数数组必须位于形参列表的最后;

  (2)参数数组必须是一维数组;

  (3)不允许将params修饰符与ref和out修饰符组合起来使用;

  (4)与参数数组对应的实参可以是同一类型的数组名,也可以是任意多个与该数组的元素属于同一类型的变量;

  (5)若实参是数组则按引用传递,若实参是变量或表达式则按值传递。

  (6)用法:可变的方法参数,也称数组型参数,适合于方法的参数个数不知的情况,用于传递大量的数组集合参数;当使用数组参数时,可通过使用params关键字在形参表中指定多种方法参数,并在方法的参数表中指定一个数组,形式为:方法修饰符 返回类型 方法名(params 类型[] 变量名)

如带有参数的SQL 语句,不同的表的字段数量也不同, 当你更新修改的时候就可以用params

 

 

params 关键字可以指定在参数数目可变处采用参数的方法参数。

// keywords_params.cs
C#中的参数修饰符 <wbr>ref,out <wbr>,params

C#中的参数修饰符 <wbr>ref,out <wbr>,params
using System;
C#中的参数修饰符 <wbr>ref,out <wbr>,params
C#中的参数修饰符 <wbr>ref,out <wbr>,params
class App
C#中的参数修饰符 <wbr>ref,out <wbr>,params
{
C#中的参数修饰符 <wbr>ref,out <wbr>,params    
public static void UseParams(params object[] list)
C#中的参数修饰符 <wbr>ref,out <wbr>,params    
{
C#中的参数修饰符 <wbr>ref,out <wbr>,params        
for (int i = 0; i < list.Length; i++)
C#中的参数修饰符 <wbr>ref,out <wbr>,params        
{
C#中的参数修饰符 <wbr>ref,out <wbr>,params            Console.WriteLine(list[i]);
C#中的参数修饰符 <wbr>ref,out <wbr>,params        }

C#中的参数修饰符 <wbr>ref,out <wbr>,params    }

C#中的参数修饰符 <wbr>ref,out <wbr>,params
C#中的参数修饰符 <wbr>ref,out <wbr>,params    
static void Main()
C#中的参数修饰符 <wbr>ref,out <wbr>,params    
{
C#中的参数修饰符 <wbr>ref,out <wbr>,params        
// 一般做法是先构造一个对象数组,然后将此数组作为方法的参数
C#中的参数修饰符 <wbr>ref,out <wbr>,params
        object[] arr = new object[3100'a'"keywords" };
C#中的参数修饰符 <wbr>ref,out <wbr>,params        UseParams(arr);
C#中的参数修饰符 <wbr>ref,out <wbr>,params
C#中的参数修饰符 <wbr>ref,out <wbr>,params        
// 而使用了params修饰方法参数后,我们可以直接使用一组对象作为参数
C#中的参数修饰符 <wbr>ref,out <wbr>,params        
// 当然这组参数需要符合调用的方法对参数的要求
C#中的参数修饰符 <wbr>ref,out <wbr>,params
        UseParams(100'a'"keywords");
C#中的参数修饰符 <wbr>ref,out <wbr>,params
C#中的参数修饰符 <wbr>ref,out <wbr>,params        Console.Read();
C#中的参数修饰符 <wbr>ref,out <wbr>,params    }

C#中的参数修饰符 <wbr>ref,out <wbr>,params}

 

 

posted @ 2012-11-10 11:36  Andy_Wong  阅读(267)  评论(0编辑  收藏  举报