out与ref的区别总结:
1.两者都是通过引用来传递。
2.两者都按地址传递的,使用后都将改变原来参数的数值。
3.属性不是变量,因此不能作为 out或ref 参数传递。
4.若要使用 ref 或 out,方法定义和调用方法都必须显式使用 out、ref 关键字。
5.rel可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。或者说,rel是有进有出,out是只出不进
6.尽管 ref 和 out 在运行时的处理方式不同,但在编译时的处理方式相同。
—6-1.因此,如果一个方法采用 ref 参数(例:Method(ref int i)),而另一个方法采用 out 参数(例:Method(out int i)),则无法重载这两个方法,因为从编译的角度来看,以上两个方法是完全相同的,因此将不会编译方法内的代码
—6-2.但是,如果一个方法采用 ref 或 out 参数(例如:Method(ref/out int i))),而另一个方法不采用这两个参数Method(int i)),则可以进行重载
7.实用场合:out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

代码如下:

 1         public static void Main(string[] args)  2  {  3 //使用out  4 Console.WriteLine("-----------------------------使用OUT的方法-----------------------------");  5 Console.WriteLine("-----------------调用Out方法前参数没赋值-----------------");  6 string outName;  7 string outSchool;  8 int outGrad;  9 outMethod(out outName, out outGrad, out outSchool); 10 Console.WriteLine("学生" + outName + "是:" + outSchool + outGrad + "级学生"); 11 12 Console.WriteLine("-----------------调用Out方法前参数赋值了-----------------"); 13 string outNameValue = "李XX"; 14 string outSchoolValue = "河南大学"; 15 int outGradValue = 2011; 16 outMethod(out outNameValue, out outGradValue, out outSchoolValue); 17 Console.WriteLine("学生" + outNameValue + "是:" + outSchoolValue + outGradValue + "级学生"); 18 19 20 21 //使用ref: 22 Console.WriteLine("-----------------------------使用REF的方法-----------------------------"); 23 string refName = "李XX"; 24 string refSchool = "河南大学"; 25 int refGrad = 2011; 26 Console.WriteLine("-----------------refMethod方法里没赋值-----------------"); 27 refMethod(ref refName, ref refGrad, ref refSchool); 28 Console.WriteLine("学生" + refName + "是:" + refSchool + refGrad + "级学生"); 29 Console.WriteLine("-----------------refMethod方法里赋值了-----------------"); 30 refMethodValue(ref refName, ref refGrad, ref refSchool); 31 Console.WriteLine("学生" + refName + "是:" + refSchool + refGrad + "级学生"); 32 33  Console.ReadLine(); 34  } 35 36 37 38 //outMethod 39 //out方法输出参数特征: 40 //1.不在栈中为形参分配新的内存。 41 //2.形参的名称相当于实参变量的别名,引用与实参相同的内存位置。 42 //3.既然形参和实参引用相同的内存位置,则在方法执行期间,形参所做的任何改变在方法完成之后通过实参变量都是可见的。 43 private static void outMethod(out string name, out int grad, out string school) 44  { 45 name = "王XX"; 46 grad = 2009; 47 school = "郑州大学"; 48 } 49 50 //refMethod 51 //ref方法输出参数特征: 52 //1.不在栈中为形参分配新的内存。 53 //2.形参的名称相当于实参变量的别名,引用与实参相同的内存位置。 54 //3.既然形参和实参引用相同的内存位置,则在方法执行期间,形参所做的任何改变在方法完成之后通过实参变量都是可见的。 55 private static void refMethod(ref string name, ref int grad, ref string school) 56 { 57 58 } 59 private static void refMethodValue(ref string name, ref int grad, ref string school) 60 { 61 name = "王XX"; 62 grad = 2009; 63 school = "郑州大学"; 64 }

以上代码的输出结果:

由以上的输出结果可以看出:

1、在调用方法outMethod之前变量赋值不赋值没有任何意义,因为out是要把参数清空的,其参数赋值只要在方法内部进行就可以了;即out是只出不进

2、在调用refMethod之前必须给变量赋值,然而在refMethod方法内部参数赋值不赋值均可以,如方法内部重新赋值了则修改其值,如方法内部没重新赋值则不修改其值;rel是有进有出,

转载于:https://www.cnblogs.com/cocoon/p/4997010.html

C#之out和ref区别相关推荐

  1. reactive和ref区别

    reactive与ref区别 1. 从定义数据方面: ref通常用来定义基本类型数据 reactive用来定义:对象(或者数组)类型数据 ref也可以用来定义对象或者数组类型的数据,内部会通过reac ...

  2. C#中out 及 ref 区别

    方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量. 当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中. 当希望方法返回多个值时,声明 out 方法非常有用. ...

  3. MySQL索引管理及执行计划

    MySQL索引管理及执行计划 第1章 索引介绍: 索引是对数据库表中一列或者多列 的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息,如果想按特定职员的姓名来查找,则与他在表中搜索所有的 ...

  4. ML之sklearn:sklearn.linear_mode中的LogisticRegression函数的简介、使用方法之详细攻略

    ML之sklearn:sklearn.linear_mode中的LogisticRegression函数的简介.使用方法之详细攻略 目录 sklearn.linear_mode中的LogisticRe ...

  5. web前端面试题— 简答题

    如有不同意见或建议,记得留下评论~ 简答题 1.http和https的特征和区别: 特征: HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最 ...

  6. MySQL+Mybatis

    目录 一.事务 1.概念 2.事务的基本特性(ACID) 3.事务中并发一致性的问题 4.事务的隔离级别 二.MySQL的锁 1.按锁的粒度分类: 2.按锁的类型分类: 3.InNoDB中行锁定的方式 ...

  7. 深入浅出Mysql - 优化篇(索引)

    SQL优化 通过show status了解各种sql执行的频率 mysql> show status like 'Innodb_rows_%';+----------------------+- ...

  8. 高性能MySQL -- 查询性能优化

    一般来说一个好的程序:查询优化,索引优化,库表结构要同时进行优化.今天我们来讲一下查询优化. 我们需要对MySQL的架构有基本认知,所以这里贴一张图大家看看: 图片来自于<小林coding> ...

  9. 前端之vue3的setup和setup的2个的形参、响应式页面

    setup setup setup总结 ref()函数 -- 实现响应式 ref()小结 reactive函数处理对象(包括数组) reactive小结 vue2/3响应式原理 vue2存在问题, 提 ...

最新文章

  1. docker本地仓库镜像
  2. 6425C-Lab2 安全高效地管理AD
  3. python代码示例500行源代码-500行Python代码打造刷脸考勤系统,其实也就那么简单...
  4. 架构师经常参考的Netflix架构,它的全貌是怎样的?
  5. Eclipse自动注册Servlet:web.xml注册和@Servlet注解 实现注册
  6. Spring Web MVC 支持最新的API
  7. leetcode546. 移除盒子(dp)
  8. 应用商店应用计算机,基于中国虹计算机的应用商店的设计与实现
  9. 为什么有人执着于只买黑色的手机?
  10. C#中的@符号的使用
  11. 高考分数出来了,计算机专业选择那个方向更香?
  12. 使用cgroup限制某个程序对内存的使用
  13. 软件测试工程师简历项目经验怎么写
  14. zedgraph怎么画曲线图_ZedGraph如何动态的加载曲线
  15. 深蓝超级计算机象棋人机大战,象棋人机大战绝唱:超级计算机“浪潮天梭”vs“象棋第一人”许银川的巅峰之战...
  16. 【笔记】Telink BDT EVK烧录时错误
  17. Elasticsearch 的内存优化
  18. 在Element UI中表格根据数据动态变化显示表格的内容
  19. MxDraw云图平台(H5网页CAD) 2022.11.15更新
  20. canvas生成二维码海报-可配置

热门文章

  1. hdu 1892【二维树状数组】
  2. hadoop+hive-0.10.0完全分布式安装方法
  3. Android Studio如何减小APK体积
  4. Powershell-获取DHCP地址租用信息
  5. Linux下安全审计工具 lynis 使用说明
  6. hive如何处理not in和in的问题
  7. jquery复选框 选中事件 及其判断是否被选中_常用笔记
  8. 第6章 服务模式 Service Interface(服务接口)
  9. Linux下查看文件和文件夹大小的df和du命令(链接)
  10. 我来告诉你为什么中国民营企业管理失败的原因!