C# 中方法参数的传递

来源:互联网 发布:非农数据与黄金走势 编辑:程序博客网 时间:2024/05/07 12:40

       我们知道,使用参数传递给方法有两种传递方式,一种是引用传递,另一种则是值传递。

       变量在通过引用方式传递给方法时,传递给方法的就是这个变量,因此在被调用的方法内部对该变量内容进行修改,方法退出后修改的变量值依然有效。而变量通过值传递给方法时,传递的就是该变量的一个副本,在方法内部对其修改当方法退出后该变量的原值并没有被修改。

      如果变量是复杂的数据类型,用值传递的方式则会使效率降低,原因在于会复制大量的数据副本。

      在C#中,没有特殊申明时,所有的参数传递方式都是值传递方式。那么明明有些参数传递给方法后变量的值是会被修改的,例如类、数组作为参数传递时。为什么说是值传递呢?

      这里在理解上需要注意下,在传递的时候我们传递的是类的实例名称或数组名称,变量本身就是引用类型,所以传递的是类或数组的引用,把这个引用当做一个值传递给方法,在被调用的方法中复制的正是引用的副本,所以在方法内部虽然操作的是引用的副本,其实操作的是同一个对象,修改的新的值会反射在原始对象中。

      声明引用传递:

      声明引用传递的关键字:ref 、out

      如前面所讲的,参数通过值传递是默认,有时候也需要强制使用引用传递。这时候就需要使用ref关键字修饰变量。如果把一个变量传递给方法,并且该变量前带有ref关键字,就说明,被调用的方法中对该变量的值做修改会影响到变量的原值。有一点需要注意,该变量在传递之前是需要初始化的。      

        static void Function(int[] ints, ref int value)        {            ints[0] = 100;            value = 100;        }
     在调用该方法时候也需要加ref         

      Function(ints,ref i);
     有时候我们需要在C#中也能像C,C++的方法一样,函数能够在一次调用中输出多个值,这就需要使用输出参数,只要把输出的值赋予通过引用传递给方法的变量即可。

可是C#规定,参数在传递给方法之前必须要初始化先,哪怕传递之前的初始化是无意义的,但这样做没有必要,有时候可能会使得可读性变差甚至引起混乱。编译器使用out关键字来初始化参数变量,在传递给方法的输入参数前面加上out关键字,方法在调用之前可以不需要初始化。在方法内部修改参数变量的值,会被保存下来。在调用该方法时候也需要加out关键字。

        

static void Function(out int value){   value = 100;}
int i;Function(out i);



原创粉丝点击