C#中ref和out关键字的应用以及区别(参数修饰符)
ref
ref的定义
ref是reference的缩写,通过引用来传递参数的地址,ref基本上是服务于值类型的
ref的使用
//不使用 ref; void Method(int myRefInt) { myRefInt += 66; //在不使用ref的时候,方法在对参数执行操作后会直接销毁 } int number = 1; Method(number); Console.WriteLine(number); **//输出 : 1;** //使用ref void Method(ref int myRefInt) { myRefInt += 66; //这里传递进来的是值类型参数的引用地址,在方法里直接修改了地址对应的值 } int number = 1; Method(ref number); Console.WriteLine(number); **//输出:67**
out
out的定义
作为参数修饰符,通过引用而不是通过值传递参数
out的使用
//从结果和传参的方式来看和ref几乎没有区别 int number; Method(number); void Method(int myRefInt) { myRefInt = 66; } Console.WriteLine(number); //输出:0 int number; Method(out number); void Method(out int myRefInt) { myRefInt = 66; } Console.WriteLine(number); //输出:66
ref和out的区别
使用ref传递参数的时候,被修饰的参数必须要有值
使用out可以将一个未赋值的变量作为参数传递
class RefAndOut { public static void OutDouble(out int outInt) { outInt = 2; Console.WriteLine("outInt is:"+outInt); } public static void RefDouble(ref int parInt) { parInt *= 2; Console.WriteLine("refInt is:"+parInt); Console.ReadKey(); } public static void NormalDouble(int IntPar) { IntPar = 1; IntPar *= 2; Console.WriteLine("normalInt is:" + IntPar); Console.ReadKey(); } static void Main(string[] args) { int refInt; int outInt; int normalInt; OutDouble(out outInt); //success 可以传入一个未赋值的变量 RefDouble(ref refInt); //error 使用了未赋值的变量 NormalDouble(normalInt); //error 使用了未赋值的变量 } }
ref和out存在区别的原因
ref:直接将外部变量的地址传进方法
out:在方法内部为传进来的参数非配地址,然后将地址返回并赋值给外部的变量(这就是out可以传进未赋值的变量,因为在内部重新分配地址)
---------------
原文地址:http://t.csdn.cn/QHRWN
分类:
1001-C#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?