• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#值类型与引用类型

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

有些最基本的概念,长时间不去结合实际去总结思考,总会有点茫然。

现在就记录下晨会同事聊到的基本概念:

在C#语言中,方法的参数传递默认是按值传递的。当然,使用一些关键字可以改变这种参数传递行为,例如使用ref/out关键字可以使方法参数按引用传递。
但是一提到值、引用这样的字眼,很多人都会立马想到值类型和引用类型。而这也是一个常见的误区:把方法参数传递的概念和类型的概念搞混。

这两种概念是不同的,默认情况下无论是值类型还是引用类型参数都是按照值来传递的,而使用了ref/out参数时,值类型也可以按照引用来传递。

所以值类型既可以按值传递,也可以按引用传递(而且不存在装箱的问题);引用类型既可以按值传递,也可以按引用传递。
这一部分就来聊聊方法参数的传递机制吧。

 

值类型按值传递

方法的参数传递默认是按值传递的,值类型变量按值传递给方法简单的说就是传递一份值类型变量的拷贝给方法。在声明方法时,会默认为参数分配一块新的内存空间用来保存参数的拷贝。
因此,方法内对参数的修改不会影响最初的值。

 

引用类型按值传递

同样,默认情况下引用类型的参数也是按值传递的。所以,和值类型变量按值传递类似,引用类型变量按值传递同样是将变量的拷贝给方法。

回忆一下前文的内容,引用类型变量的值是什么呢?对,是对一个对象的引用。所以我们可以在方法内修改引用类型参数所引用的对象,但是在方法内对参数的修改同样不会影响最初的。即我们无法在方法内部改变原来的引用类型变量对对象的引用。

 

值类型按引用传递

按引用传递参数,简单的说并非传递变量的值,而是传递对变量的引用,同时方法内操作的也不是变量的值,而是通过引用直接操作变量本身。因此方法内部不会再为参数分配一块内存空间,相反,方法会直接操作变量所在的那块内存空间。

 

引用类型按引用传递

方法中的参数值修改,会影响带方法外的值,因为引用类型的“值”,也就是引用,操作的是同一个内存空间。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[C#] Format a XML string using XmlTextWriter发布时间:2022-07-10
下一篇:
从零开始写C# MVC框架之--- 项目结构发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap