技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

[示例]详解 C# 中的 ref 与 out 的不同

作者:admin    时间:2023-5-7 9:46:44    浏览:

在前文中,我简单介绍了C# ref vs out 的区别,在本文我将继续通过多个示例来详解 C# 中的 ref out 的不同。

C# 中的 refout 关键字用于在方法或函数中传递参数,两者都表明参数是通过引用传递的。默认情况下,参数按值传递给方法。通过使用这些关键字(refout),我们可以通过引用传递参数。

ref 关键字

ref 关键字通过引用传递参数,这意味着当控制权返回到调用方法时,在方法中对此参数所做的任何更改都将反映在该变量中。

示例代码

public static string GetNextName(ref int id)
{
    string returnText = "Next-" + id.ToString();
    id += 1;
    return returnText;
}
static void Main(string[] args)
{
    int i = 1;
    Console.WriteLine("Previous value of integer i:" + i.ToString());
    string test = GetNextName(ref i);
    Console.WriteLine("Current value of integer i:" + i.ToString());
}

输出

 

out 关键字

out 关键字通过引用传递参数。这与 ref 关键字非常相似。

示例代码

public static string GetNextNameByOut(out int id)
{
    id = 1;
    string returnText = "Next-" + id.ToString();
    return returnText;
}
static void Main(string[] args)
{
    int i = 0;
    Console.WriteLine("Previous value of integer i:" + i.ToString());
    string test = GetNextNameByOut(out i);
    Console.WriteLine("Current value of integer i:" + i.ToString());
}

输出

 

ref 和 out 的主要区别

ref out
在传递给 ref 之前,参数必须先初始化。 在传递给 out 之前,不必初始化参数。
在返回到调用方法之前不需要分配或初始化参数的值(由 ref 传递)。 在返回调用方法之前,被调用方法需要分配或初始化参数值(传递给out)。
当调用的方法也需要修改传递参数时,通过 ref 传递参数值很有用。 当需要从函数或方法返回多个值时,向 out 方法声明参数很有用。
在调用方法中使用参数值之前,不必初始化参数值。 参数值必须在使用前在调用方法中初始化。
当我们使用 ref 时,数据可以双向传递。 当我们使用 out 时,数据仅以单向方式传递(从被调用方法到调用方方法)。
  • refout 在运行时的处理方式不同,而在编译时的处理方式相同。
  • 属性不是变量,因此不能作为 outref 参数传递。

ref/out 关键字和方法重载

refout 在运行时的处理方式不同,而在编译时它们的处理方式相同,因此如果一个方法将参数作为 ref 而另一个将参数作为 out,则不能重载方法。

示例代码

public static string GetNextName(ref int id)
{
    string returnText = "Next-" + id.ToString();
    id += 1;
    return returnText;
}
public static string GetNextName(out int id)
{
    id = 1;
    string returnText = "Next-" + id.ToString();
    return returnText;
}

编译代码时的输出

 

但是,当一个方法采用 refout 参数而另一个方法采用相同的参数但不带 refout 时,方法重载是可能的。

示例代码

public static string GetNextName(int id)
{
    string returnText = "Next-" + id.ToString();
    id += 1;
    return returnText;
}
public static string GetNextName(ref int id)
{
    string returnText = "Next-" + id.ToString();
    id += 1;
    return returnText;
}

概括

当我们想要在作为参数传递的相同变量中返回一个值时,outref 关键字很有用。

参考文章:

相关文章

标签: asp.net  CSharp  ref  out  
x
  • 站长推荐
/* 左侧显示文章内容目录 */