首页 > 代码库 > 初学笔记(C#方法的参数传递)
初学笔记(C#方法的参数传递)
在声明方法时,所定义的参数是形式参数(简称形参),这些参数的值由调用方负责为其传递,调用方传递的是实际数据,成为实际参数(简称实参),在调用方法时,,必须严格按照方法所定义的参数类型和顺序指定实参。方法的参数传递按性质分为按值传递和按引用传递。
1.安值传参
按值传递时,把实参变量的值赋给相应的行参变量,即被调用的方法接受的只是实参的数据值。当方法内部更改了形参数据时,不会影响到是参变量的值,即实参和形参变量是两个不相同的变量,它们具有各自的内存地址和数据值。故实参传递给形参是一个单向值传递。值类型的参数在传递时默认为按值传参。string和object虽是引用型数据,但从表现形式来看,其具有按值传参的效果。
2.按引用传参
方法只要能返回一个值,在实际中,常常需要方法能够返回多个值或修改传入的参数值并返回,此时只用return语句是无法做到的,这是可以使用按引用传参来实现。
在传递引用参数时,调用方将把实参的引用传递给相应的形参。实参的引用代表了数据的内存地址,因此,形参和实参指向同一个引用。如果在方法内部更改形参所引用的数据值,那么同时修改了实参所引用的数据值。当值类型和string类型参数要按引用方式传递时,通过ref关键字声明引用参数,无论是实参还是形参,要按引用传参,就必须添加关键字ref。
3.输出参数
方法中的return只能返回一个值,引用参数可以返回多个值,但在用ref修饰的参数在传递前必须先初始化。但有时参数在传递之前并不确定,其值应在方法调用结束后返回,这时可以使用使用输出参数,它不需要对实参初始化,输出参数专用于方法中的数据通过形参返回给实参,但不会将实参的值传递给形参。一个方法中可以有多个输出参数。
在C#中,通过out关键字来声明参数,无论是实参还是形参,只要是输出参数,就必须添加out关键字。
用ref和out修饰的参数都是引用类型传参形式,在方法内部的修改和赋值都会被保留在实参中,但它们在使用时有一定的区别。
(1)用ref修饰的参数,在方法传参之前必须对实参赋值。
(2)用out修饰的参数,在方法传参之前不必初始化,但在方法中必须赋值后才能使用,并且在方法结束前,必须对该参数赋值。
4.引用类型的参数传递
引用类型的参数传递是按引用传递的,所以引用类型的参数传递时不需ref和out关键字(string除外),引用类型参数的传递,实际上是将实参数据的引用复制到形参。所以形参和实参共同指向同一内存区域。
5.数组型参数
数组也是引用类型数据,把数组作为参数传递时,,也是引用传递。但数组作为参数作为参数,有两种形式:一种是在形参数组前加params修饰,另一种是不加params关键字。不加params修饰符时,所对应的实参必须是一个数组名;添加params修饰符时所对应的实参可以是数组名,也可以是数组元素值的列表,此时系统将自动把元素组织到一个数组中。不论哪种,形参数组都不能定义数组的长短。
在使用params修饰符时,要注意以下几点:
(1)params可以修饰任意类型的参数。
(2)params只能修饰一维数组。
(3)不能仅基于params关键字来重载方法。
(4)不能对params数组使用ref和out关键字。
(5)params数组只能在最后一个参数(即每个方法只能有一个params数组)。
6.方法的重载
在这简单介绍一下方法的重载。重要介绍方法重载的特点:
(1)重载方法的名称必须相同。
(2)重咋方法的参数个数或类型必须不同。
在调用具有重载的方法时,系统会根据参数的个数或类型来确定最匹配的方法调用。
初学笔记(C#方法的参数传递)