C#.Net 关键字ref和out的区别
out关键字:
方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。
若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
属性不是变量,不能作为 out 参数传递。
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。
传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。
属性不是变量,不能作为 ref 参数传递。
//上面的理解起来非常不好理解。下面我说说我自己的看法。
首先:两者都是按地址传递的,使用后都将改变原来的数值。很多人在论坛上解释说out是按数值传递,是错误的。简单的测试后可以知道out使用也能改变数值的,所以肯定是按照地址传递的。
其次:rel可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的:rel是有进有出,out是只出不进!!!

参考文档:
ASP.NET ASPX 页面CodeFile与CodeBehind的区别
C#.NET 达梦数据库存储过程 获取OUT参数返回值|C/S开发框架
升级到.NET8 LINQ Where关键字 'WITH' 附近有语法错误解决方案|C/S开发框架
FastReport.NET v2021 打印预览报表出错NullReferenceException / RestoreEncodedText,踩坑!
.NET Framework V4.0版本经典模式和集成模式的区别 - 阿里云虚拟主机.NET版本设置
C#.Net前台线程与后台线程的区别
C#.Net反射(Reflaction)技术实例详解
C# .NET 入门概念与知识点总结|C/S开发框架
C#/.NET 基础学习|C/S开发框架
C#.NET理解Task和async await原理-C/S开发框架
C#.Net组件开发(高级篇) - 设计时在窗体设计器文件内生成组件的代码
C#.Net 调用Delphi 编译的ActiveX COM组件(原)
.NETCore WebApi运行报错:System.AggregateException:“Some services are not able to be constructed|C/S开发框架
C#.NET调用达梦数据库的存储过程返回多张表|C/S开发框架
CSFramework.WebapiV3(.NET7/NetCore) 系统安全及Token令牌介绍|C/S开发框架
C# 对象克隆 TOut ObjectHelper.Clone |C/S开发框架
ASP.NET ASPX 页面CodeFile与CodeBehind的区别
C#.NET 达梦数据库存储过程 获取OUT参数返回值|C/S开发框架
升级到.NET8 LINQ Where关键字 'WITH' 附近有语法错误解决方案|C/S开发框架
FastReport.NET v2021 打印预览报表出错NullReferenceException / RestoreEncodedText,踩坑!
.NET Framework V4.0版本经典模式和集成模式的区别 - 阿里云虚拟主机.NET版本设置
C#.Net前台线程与后台线程的区别
C#.Net反射(Reflaction)技术实例详解
C# .NET 入门概念与知识点总结|C/S开发框架
C#/.NET 基础学习|C/S开发框架
C#.NET理解Task和async await原理-C/S开发框架
C#.Net组件开发(高级篇) - 设计时在窗体设计器文件内生成组件的代码
C#.Net 调用Delphi 编译的ActiveX COM组件(原)
.NETCore WebApi运行报错:System.AggregateException:“Some services are not able to be constructed|C/S开发框架
C#.NET调用达梦数据库的存储过程返回多张表|C/S开发框架
CSFramework.WebapiV3(.NET7/NetCore) 系统安全及Token令牌介绍|C/S开发框架
C# 对象克隆 TOut ObjectHelper.Clone |C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
