C#传值和传值调用分析

调用是传值还是传址,主要取决于数据类型和是否使用了ref和out,下面对此作一一分析(本文出处http://blog.csdn.net/AppleDotnet/) 首先是数据类型 C#中的数据类型按我理解的分类有 1、值类型: a)除string以外的所有基本类型(如int,float,double等); b)结构的对象; 2、引用类型 a)数组; b)类的对象; 3、特殊的系统类型; a)string 说明: string的特殊之处在于:传递string参数时,传递的是引用(传址),但方法中不可以修改它,这是因为string设计上不能修改的,修改就会产生一个新的string,所以在用代码作测试时,string会看起来像一个传值的调用(在方法中修改不影响原先的变量) 在这里总结一下我个人使用中的经验,供大家参考 1、所有值类型都是传值调用,也就是会复制一份传递给被调用的方法(意味着可能多使用内存) 2、不需要使用ref或out,所有引用类型都是传址调用,即参数是数组或类的对象的时候,C#就已经是用传址调用了,再加ref是没意义的(也不会导致出错),但是out是有意义,因为可能需要传入未定义的引用类型变量; 3、特殊的系统类型string,平时使用中可以把它当作是值类型来看,虽然它实质上不是; 4、ref参数,所有使用了ref的参数都是传址调用————如果你不确定一个变量是值还是引用,可以滥用它; 5、out参数 a)使用了out参数,那这个参数原先的值就是没意义的,因为你在方法内必须构造它(注意是必须),而且根本访问不到原先的值,编译器会提示使用了未赋值的变量; b)out参数实际上不是一种调用方式,因为它什么值也没传入,它可以理解为一种返回值的约定;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值