引用 C# 中的关键字

本文关键字:关键字 引用 | 更新日期: 2023-09-18 11:27:38

C# 支持值类型和引用类型数据类型。默认情况下,值类型变量按值传递,引用类型变量通过引用从 C# 中的一个方法传递到另一个方法。

using System;
 
public class Program
{
    public static void Main(string[] args)
    {
        int myNum = 10;
             
        // pass value type
        ProcessNumber(myNum);
        Console.WriteLine(myNum);
             
        Console.ReadLine();
    }
 
    public static void ProcessNumber(int num)
    {
            num = 100;
    }
}

输出:

10

在上面的示例中,值类型变量 myNum 是按值传递的。因此,ProcessNumber() 方法中的更改不会反映到 myNum,而引用类型变量 myStr 通过引用传递给 ProcessString() 方法。因此,ProcessString() 方法中的任何更改都将得到反映。

我们有时需要通过引用传递值类型变量。那么,该怎么做呢?

C# 包含 ref 和 out 是关键字,这有助于我们通过引用将值类型变量传递给另一个函数。

下面的示例演示如何使用 ref 关键字通过引用传递值类型变量。

class Program
{
    static void Main(string[] args)
    {
        int myNum = 10;
        ProcessNumber(ref myNum); //use ref to pass the parameter by reference 
           
        Console.WriteLine(myNum);
        Console.ReadLine();
    }
 
    public static void ProcessNumber(ref int num)
    {
        num = 100;
    }           
}

输出:

100

正如你在上面的例子中看到的,ProcessNumber() 方法使用 ref 关键字指定了一个 int 参数,因此我们必须在调用 ProcessNumber() 方法时传递此参数时使用 ref 关键字。在作为带有 ref 关键字的参数传递之前,必须为变量赋值。

我们必须在传递给方法时指定 ref 关键字。否则,它将给出编译时错误。

static void Main(string[] args)
{
    int myNum = 10;
    ProcessNumber(myNum); //Compile-time Error: Must use ref keyword 
           
    Console.WriteLine(myNum);
    Console.ReadLine();
}
 
public static void ProcessNumber(ref int num)
{
    num = num + 100;
}

该方法可以包含带有 ref 参数的其他参数,如下所示。

static void Main(string[] args)
{
    int myNum = 10, val=0;
    ProcessNumber(ref myNum, val); 
           
    Console.WriteLine(myNum);
    Console.ReadLine();
}
 
public static void ProcessNumber(ref int num, int val )
{
    num = num + val;
}

方法重载中的引用和输出参数(Ref and Out Parameter in Method Overloading)

ref 和 out 的处理方式与编译时相同,但在运行时不同。我们不能定义一个仅在"ref"和"out"参数上不同的重载方法。下面将给出编译器错误。

interface INumberProcessor
{
    void ProcessNumber(ref int k, int j);
    void ProcessNumber(out int k, int j);
}

但是,我们可以定义方法重载 ref 或 out 参数,如下所示。

interface INumberProcessor
{
    void ProcessNumber(int k, int j);
    void ProcessNumber(ref int k, int j);
    void ProcessNumber(int k, ref int j);
}
 

本文内容总结: