开放的编程资料库

当前位置:我爱分享网 > C#教程 > 正文

C# 引用、输出、输入

C#ref、out、in关键字教程解释了ref/out/in关键字之间的区别并展示了如何使用它们。

在C#中,方法参数默认是copy传递的。我们使用ref关键字通过引用传递值。当我们通过引用传递值时,该方法接收到对实际值的引用。修改后会影响原始值。ref要求在传递变量之前对其进行初始化。ref修饰符必须用在方法定义和方法调用中。outin关键字是对ref的一些修改。

out关键字也可以通过引用传递参数。与ref不同,它不需要预先初始化传递的变量。要使用out参数,方法定义和调用方法都必须显式使用out关键字。

in关键字导致参数通过引用传递,但确保参数未被修改。作为in参数传递的变量必须在方法调用中传递之前进行初始化。

重载方法时,它们的签名不能仅由inrefout区别。当一个方法没有其中一个修饰符而另一个方法有时,重载是可能的。

inrefout修饰符具有以下限制:

  • 它们不能用在异步方法中
  • 它们不能用在包含yieldreturn或yieldbreak语句的interator方法中

C#ref修饰符示例

以下示例使用ref关键字来更改两个变量的值。

int a = 4;
int b = 7;

Console.WriteLine("Outside Swap method");
Console.WriteLine($"a is {a}");
Console.WriteLine($"b is {b}");

Swap(ref a, ref b);

Console.WriteLine("Outside Swap method");
Console.WriteLine($"a is {a}");
Console.WriteLine($"b is {b}");

void Swap(ref int a, ref int b)
{
    int temp = a;
    a = b;
    b = temp;

    Console.WriteLine("Inside Swap method");
    Console.WriteLine($"a is {a}");
    Console.WriteLine($"b is {b}");
}

原始变量在Swap方法中被改变。

Swap(ref a, ref b); 
...
void Swap(ref int a, ref int b)

请注意,方法调用和方法定义都使用了ref关键字。

$ dotnet run 
Outside Swap method
a is 4
b is 7
Inside Swap method
a is 7
b is 4
Outside Swap method
a is 7
b is 4

C#输出修饰符示例

以下示例使用了out修饰符。

ReadName(out string? name);
Console.WriteLine(name);

void ReadName(out string? name) {

    Console.Write("Enter your name: ");
    name = Console.ReadLine();
}

在示例中,我们读取了用户的输入。输入存储在具有out修饰符的变量中。name变量在使用前未定义。

ReadName(out string? name);
...
void ReadName(out string? name) {

out关键字用于方法调用和定义。

$ dotnet run 
Enter your name: Peter
Peter

C#修饰符示例

在下面的例子中,我们使用了in修饰符。

string msg = "an old falcon";
Modify(in msg);

void Modify(in string msg) {

    msg = "a young eagle";
}    

我们尝试修改msg变量,但编译以错误消息结束:errorCS8331:Cannotassigntovariable’instring’becauseitisareadonlyvariable

在本文中,我们介绍了C#ref、out和in关键字。

列出所有C#教程。

未经允许不得转载:我爱分享网 » C# 引用、输出、输入

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏