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关键字,与在定义该方法时一样:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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代理 了,记录一下