out的使用 ————————————————————————————————————————————————— class Program { static void Main(string[] args) { string tmp; //先声明,但不初始化 User _user=new User(); _user.Name(out tmp); //调用Name方法 Console.WriteLine("{0}",tmp); //这时tmp的值为“在这里面赋值了” Console.ReadKey(true); } } class User { public void Name(out string tmps) { tmps="在这里面赋值了"; } } //结果: //在这里面赋值了
————————————————————————————————————————————————— ref的使用 ————————————————————————————————————————————————— class Program { static void Main(string[] args) { string tmp="传值之前"; //声明并初始化 这时如果输出tmp值为"传值之前" User _user=new User(); _user.Name(ref tmp); Console.WriteLine("{0}",tmp); Console.ReadKey(true); } } class User { public void Name(ref string tmps) { tmps="传值之后"; } } // 结果: //传值之后 ————————————————————————————
Person p = new Person() { Age = 17, Name = "张明" }; //TestRef2(ref p); //Console.WriteLine(p.Name); Test3(p); Console.WriteLine(p.Name);
static void TestRef2(ref Person p) { p = new Person() { Name = "小明" }; //p.Name = "李雷"; } static void Test3(Person p) { // p = new Person() { Name = "花花" }; p.Name = "李雷"; }
//1. ref/out是用来修饰方法的参数的. //2. 调用的时候 给ref/out赋值 不能赋值1个常量 只能给变量. 变量前面也要加1个ref/out //3. 在给ref/out参数赋值的时候,赋值的是变量的地址. //4. ref在方法中可以对其值不修改. //5. ref 在传递之前必须赋值.
区别:
ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候. ref传递的是变量的地址侧重于修改
out
方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。
若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
属性不是变量,不能作为 out,ref 参数传递。
ref是 有进有出,而out是 只出不进。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)