初学笔记(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)重咋方法的参数个数或类型必须不同。

        在调用具有重载的方法时,系统会根据参数的个数或类型来确定最匹配的方法调用。

你可能感兴趣的:(参数传递)