C#基础:引用传递的关键字ref和out

在平时的编码过程中,如果我们需要调用一个函数,对一个变量进行一系列的操作,那么我们可以使用值传递和引用传递两种方法。

下面我举一个简单的例子:

 public static void Main(string[] args)
 {
     int number = 5;
     Console.WriteLine("number value= " + number);
     number = Add(number);
     Console.WriteLine("After calling Add: " + number);
 }

public static int Add(int a)
{
    return a+1;
}

 

上述代码实现的效果是对一个int类型的变量number进行加一的操作,这个操作是通过值传递实现的,即将number变量传给Add函数,由该函数操作后返回一个int类型的值,再赋值给number,这种方法实际上是复制了一个number,然后对其进行操作,在我们要传递复杂的类或者大型的对象的时候,这个复制的开销就会很大。

因此C#也提供了引用传递的方法,比起值传递,引用传递只需要传递一个指针,对于内存的开销会比较小,以下是使用ref关键字进行引用传递的实现:

 1  public static void Main(string[] args)
 2  {
 3      int number = 5;
 4      Console.WriteLine("number value= " + number);
 5 
 6      //引用传递
 7      Increment(ref number);
 8      Console.WriteLine("After calling Increment: " + number);
 9  }
10   static void Increment(ref int value)
11   {
12       value += 1;
13   }

在这个代码中,传递number变量的时候,我们在其前面和形参列表前加上ref,即可表示引用传递,ref关键字有个需要注意的点就是,在传递之前,该对象或者变量需要已经被初始化。

而C#中还有一个out关键字,它不需要初始化,但是它也仍然需要在函数内部被赋值。

以下是out关键字的示例:

public static void Main(string[] args)
{
    int number;
    Console.WriteLine("Before calling GetNumber: uninitialized");

    // 使用 out 参数的方式
    GetNumber(out number);
    Console.WriteLine("After calling GetNumber: " + number);

    // 使用返回值的方式
    number = GetAnotherNumber();
    Console.WriteLine("After calling GetAnotherNumber: " + number);
}

static void GetNumber(out int value)
{
    value = 42; // 必须在方法内部为 out 参数赋值
}

public static int GetAnotherNumber()
{
    return 42;
}

 

 

 

 

 

 

 

posted @ 2024-07-06 18:10  Jet清远  阅读(10)  评论(0编辑  收藏  举报