十、传值,传引用(ret和out区别

 定义:

      ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。

      out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。

 

传值:

  传实际的数据进入,不会改变传入值;p=9,x=8;即X的值不会受P影响,给P赋一个新值并不会改变X的内容,因为P和X存在于内存中不同的位置。

class Test
{
  static void Main(string[] args)
  {
    int x=8;
    Fo(x);
    Console.WriteLine("x={0}", x);
  }

  static void Fo(int p)
  {
    p = p + 1;
    Console.WriteLine("p={0}", p);
  }
}

运行结果为:p=9,x=8;

传引用:ref修饰符在写函数和调用函数时都一定要出现

  如果在函数FO中改变P的值,则X的值也会随之改变

static void Main(string[] args)
{
  int x = 8;
  Fo(ref x);
  Console.WriteLine("x={0}", x);
}

static void Fo(ref int p)
{
  p = 10;
  p = p + 1;
  Console.WriteLine("p={0}", p);
}

运行结果:P=11,X=11;

 

ref修饰符主要应该于实现交换的方法中

static void Swap(ref string a, ref string b)
{
  string temp = a;
  a = b;
  b = temp;
}
static void Main()
{
  string x = "Hello";
  string y = "World";
  Swap(ref x, ref y);
  Console .WriteLine (x);
  Console.WriteLine(y);

}

运行结果:World Hello

out修饰符:out修饰符在写函数和调用函数时都一定要出现

out修饰符与ref修饰符非常相似,除了以下两点为:

一,在调用函数时不需要赋值

二,在函数退出前必须赋值。

总结:

1、传引用ref 调用方法和函数都需要带ref标志

2、传ref引用会影响传入的参数值

3、传值不会修改传入参数值

4、传引用ref和out都是用于当控制权传递回调用方法时(传入变量中并且需要返该变量中时),方法中对参数所做的任何更改都将反映在该变量中

5、ref传入时候需要初始化,out不需要

6、out在函数结束前必须赋值

posted @ 2019-09-18 11:47  大型电灯泡  阅读(523)  评论(0编辑  收藏  举报