C#基础知识回顾一ref 和 out

举报
~大鱼~ 发表于 2021/05/28 04:12:40 2021/05/28
【摘要】 今天重新看 <<C#图解教程>>发现了里面的一段话 5.7值参数   有几种参数,它们使用稍微不同的方法从方法传入或传出数据。你到现在一直看到的这种类型是默认的类型,称为值参数   使用值参数,数据通过复制实参到形参的方式传递到方法。方法调用时,系统做如下的操作:   []在栈中为形参分配空间   []复制实参到...

今天重新看 <<C#图解教程>>发现了里面的一段话
5.7值参数

  有几种参数,它们使用稍微不同的方法从方法传入或传出数据。你到现在一直看到的这种类型是默认的类型,称为值参数

  使用值参数,数据通过复制实参到形参的方式传递到方法。方法调用时,系统做如下的操作:

  []在栈中为形参分配空间

  []复制实参到形参

  变量在用作实参必须被赋值,对于引用类型,变量可以被赋值为一个引用或者null

  PS:值参数和值类型是两个完全不同的概念,值参数是把实参的值复制到形参的参数。

 

 下面这个例子:

[] 在方法被调用之前,用作实参的变量a1,a2已经在栈里面了。

[]随着方法的开始,系统在栈中形参分配空间,并从实参复制值

   因为a1是引用类型,所以引用被复制,结果实参和形参都引用堆中的同一个对象

   因为a2是值类型,所以值被复制,产生一个独立的数据项

[]在方法的结尾,f2和对象f1的字段都加上了5

[]方法的执行后,形参被栈中弹出

   a2,值类型,它的值不受方法的行为的影响

   a1,引用类型,但它的值被方法的行为改变了。

《C#基础知识回顾一ref 和 out》

 

那么ref到底有什么用呢,简单的说,就是将值类型的传递类型变成引用传递。

PS:我之前一直以为String类型是引用类型,所以在使用方法后他的值是会改变的,其实不然,String虽然是名义是引用类型,但还是以值传递的方式进行改变的。

 

文章来源: brucedone.com,作者:大鱼的鱼塘,版权归原作者所有,如需转载,请联系作者。

原文链接:brucedone.com/archives/347

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。