A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩温华 中级黑马   /  2012-11-22 21:59  /  1769 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

参数修饰符ref,out ,params的区别

5 个回复

倒序浏览
1、如果方法的参数用out来标记,在调用该方法之前,不需要初始化传递给方法的参数,但在方法内部必须初始化该参数
例子:public sealed class Program
          {
                public static void Main()
                {
                       int x;       //x没有初始化
                       GetVal(out x);   //x不需要初始化
                       Console.WriteLine(x);          //结果为10
                }

                private static void GetVal(out int x)
               {
                    v=10;        //必须初始化v
               }
          }

2、如果方法的参数用reft来标记,在调用该方法之前,必须初始化传递给方法的参数
例子:public sealed class Program
          {
                public static void Main()
                {
                        int x=5;       //x已经初始化
                       AddVal (ref x);   //x必须初始化
                       Console.WriteLine(x);          //结果为15
                }

                private static void AddVal(ref int x)
               {
                    v += 10;        
               }
          }

3、params是指向方法传递可变参数,标记了params关键字的参数只能放在方法参数列表的最后,还有,该参数只能标识任意类型的一个一维数组
例子:public sealed class Program
          {
                public static void Main()
                {
                        DisplayTypes(new object(),new Random(),"Jeff",5);
                }

                private static void DisplayTypes (params object[] objects)
               {
                   if(objects!=null)
                   {
                         foreach(object o in objects)
                         {
                               Console.WriteLine(o.GetType());
                          }
                   }      
               }
          }

输出结果:
                System.Object
                System.Random
                System.String
                System.Int32
回复 使用道具 举报
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。

方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。属性不是变量,不能作为 out 参数传递。

params 关键字可以指定在参数数目可变处采用参数的方法参数。在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。
回复 使用道具 举报
陈辉 发表于 2012-11-22 22:58
1、如果方法的参数用out来标记,在调用该方法之前,不需要初始化传递给方法的参数,但在方法内部必须初始化 ...

讲解的总是很到位,十分感谢
回复 使用道具 举报
韩温华 发表于 2012-11-23 12:49
讲解的总是很到位,十分感谢

谢谢给我这么高的评价,让我们一起努力吧
回复 使用道具 举报
1.ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
2.out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。
例如:
  Class OutExample
{
     static void Method(out int i)
      {
          i=44;
      }
     static void Method(ref int i)
      {
          i=44;
      }
     static void Method(int i)
      {
          i=44;
      }
     static void Main()
      {
         int value;
         Method(value);//在编译的时候都会报错,使用了未赋值的局部变量"value"
         Method(ref value);//在编译的时候都会报错,使用了未赋值的局部变量"value"
         Method(out value);//value=44;编译通过
      }
}
3.params 关键字可以指定在参数数目可变处采用参数的方法参数。例如:

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

}
//调用
static void Main()
{
    UseParams2(1,2,3);
}

输出:
1
2
3

在使用params的时候注意的是,在有多于一个参数的情况下,params必须放在最后面,不然会编译不通过的。




回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马