1C#的按值传递和按引用传递
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C#的按值传递和按引用传递
C#在调用函数有按值传递和按引用传递两种方法。那么这两者有什么区别呢?下面就来简单介绍一下。
C#中的按值传递与大多数编程语言相同,只要在调用方法(有些语言可能为函数)的参数括号中写入要传入的变量名就好了,当然,传入的变量类型要与该方法的参数类型一致。这样,我们就把变量的值传到进所调用的方法里了。但是,参数按值传递(C#默认)时,传递的是参数的副本,且副本的改变并不影响调用者的原始变量值,也就是说,如果我们在在方法中改变了该参数的值,按值传递的方法并不会改变原变量的值。那么,如果我们想要改变的是原变量的值,那应该怎么做呢?这时,就需要使用到引用传递了。C#为此提供了关键字ref和out。对于ref,我们在传递中只要在参数前面使用ref时就可以将变量传递给方法,被调方法这时修改的就是原变量的值了。而在参数前面加上out,则可以建立输出参数,告诉编译器这个变元是按引用传入被调方法的,这样,该变元在被调方法中发生的改变都会反映到原变元。当然,ref和out也是有区别的,使用ref型参数时,传入的参数必须先初始化,而对out型参数而言,则要在方法内完成初始化,这是因为ref可以把参数的数值传进去,而out参数会在传进去前先将参数清空。下面就让我们来看一下例子。
这里创建了一个ReferenceAndOutParameters类,该类包含了三个方法,如下:
方法SquareRef()将参数refparam的值自乘,由于变元按引用传递,因此将改变调用者的原变元值。
方法SquareOut()先将outparam的值赋为6,再自乘,它也将调用者的原变元值。
方法Square()也将参数自乘,但因为调用的是原变元的副本,所以并不会改变原变元的值。
运行结果如下: