C# ref and out

ref参数

通过值传送变量是默认的,也可以使值参数通过引用传送给方法。为此,要使用ref关键字。

如果把一个参数传递给方法,且这个方法的输入参数前带有ref关键字,则该方法对变量所做的任何改变都会影响原始对象的值:

static void Fun(int[] ints,ref int i)

{

      ints[0] = 100;

      i = 100; // The change to i will persist after Fun exits.

}

在调用该方法时,还需要添加ref关键字:

最后,C#仍要求对传递给方法的参数进行初始化,理解这一点也非常重要。在传递给方法之前,

无论是按值传递,还是按引用传递;任何变量都必须初始化。

 

out参数

在C风格的语言中,函数常常能从一个例程中输出多个值,这使用输出参数实现,只要把输出的值赋予通过引用传递给方法的变量即可。通常,变量通过引用传递的初值并不重要,这些值会被函数重写,函数甚至从来没有使用过它们。

如果可以在C#中使用这种约定,就会非常方便。但C#要求变量在被引用前必须用一个初值进行初始化。尽管在把输入变量传递给函数前,可以用没有意义的值初始化它们,因为函数将使用真实、有意义的值初始化它们,但是这样做是没有必要的,有时甚至会引起混乱。但有一种方法能够简化C#编译器所坚持的输入参数的初始化。编译器使用out关键字来初始化。

在方法的输入参数前面加上out前缀时,传递给该方法的变量可以不初始化。该变量通过引用传递,所以在从被调用的方法中返回时,对应方法对该变量进行的任何改变都会保留下来。在调用该方法时,还需要使用out关键字,与在定义该方法时一样:

posted on   youhui  阅读(281)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示