c# 引用参数-ref】的更多相关文章

引用参数 用于按引用传递自变量. 为引用参数传递的自变量必须是具有明确值的变量,并且在方法执行期间,引用参数指明的存储位置与自变量相同. 引用参数使用 ref 修饰符进行声明. 输出参数 用于按引用传递自变量. 输出参数与引用参数类似,不同之处在于,不要求向调用方提供的自变量显式赋值. 输出参数使用 out 修饰符进行声明. 下面分别示例展示了如何使用 ref out  关键字 using System; class RefExample { static void Swap(ref int x…
   一.方法参数的类型----值类型和引用类型 当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置.所以,在目标方法中对形参所做的更改不会对调用者的初始变量产生任何影响. 当方法传递的参数是引用类型是,只是将变量的引用复制到目标参数中,实参和形参的引用指向内存中的同一位置.所以,在目标方法中对形参所做的更改会影响调用者的初始变量. 二.一些特殊的方法参数 1.引用参数---ref (使值类型的变量做方法参数时也可以传引用) 一些数据类…
值参数:在使用值参数时,是把变量的值传给函数,函数中对此变量的任何修改都不影响该变量本身的值. 引用参数:使用引用参数时,在函数中对此变量的修改会影响变量的值. 说简单点,值参数,就是我把身份证复印件给了你,你在上面可以写几个字也可以撕掉,但我身份证上面显示内容不会变也不会被折断: 而引用参数,就是我把身份证给了你,你在上面写字,那确实身份证上就会显示你写的内容,你把身份证折断,那就真的是断了. 来个小程序演示下,一目了然. 再看输出结果的不同: 如上显示:用值参数时,变量在函数中被修改后,变量…
引用类型的变量不直接包含其数据:它包含的是对其数据的引用. 当通过值传递引用类型的参数时,有可能更改引用所指向的数据,如某类成员的值. 但是无法更改引用本身的值:也就是说,不能使用相同的引用为新类分配内存并使之在块外保持. 若要这样做,应使用 ref 或 out 关键字传递参数. 通过ref允许调用方法来修改引用参数引用的对象. 对象的存储位置传递给方法作为引用参数的值. 如果您修改了更改参数的存储位置,那么您也更改了基础参数的存储位置. 通过值传递引用类型 下面的示例演示通过值向 Change…
c#引用参数传递的深入剖析值类型的变量存储数据,而引用类型的变量存储对实际数据的引用.(这一点很重要,明白了之后就能区分开值类型和引用类型的差别) 在参数传递时,值类型是以值的形式传递的(传递的是值,对变量本身没有影响),是将要传递的参数的值复制给函数的形参,因此在函数体类对于该形参的任何改变都不会影响原来的值: 引用类型是以对象引用的形式传递的(传递的是引用,也就是说把同一个父级传过去,拥有相同的父亲),是将要传递的对象的引用复制给函数的形参,这时形参是实参引用的复制,注意:是引用的复制,而不…
方法的参数有六种,分别是值参数.引用参数.输出参数.参数数组.命名参数.可选参数. 值参数 值参数是方法的默认类型,通过复制实参的值到形参的方式把数据传递到方法,方法被调用时,系统作两步操作: 在栈中为形参分配空间. 复制实参到形参. 1)在方法被调用前,用作实参的变量a1的引用已经在栈里了. 2)随着方法的开始,系统在栈中为形参分配空间,并从实参复制值. 3)因为a1是引用类型,所以引用被复制,结果实参和形参都引用堆中的同一个对象. 4)因为a2是值类型,所以值被复制,产生了一个独立的数据.…
值参数不能加,引用参数可以. 引用参数是共享的 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Delegate { public delegate void Myfunction(int valCount,ref int refCount); class Program { static void Main(string[] args) { Myfun…
最近经常和同事讨论引用参数的问题,为了搞清楚,查了些资料,其中CLR via C#中讲的比较清楚,整理了下 ----摘自(CLR via C#) 在默认情况下,CLR假设所有的方法参数都是按值传递的.当参数为引用类型的对象时,参数的传递时通过传递指向对象的引用来完成的(引用本身是按值传递的).这意味着方法可以改变引用对象,并且调用代码可以看到这种改变的结果. 对于一个方法,我们必须知道它的每个参数是引用类型参数,还是值类型的参数,因为我们编写的操作参数的代码会因此有很大的差别. 除了按值传递参数…
一.C#方法中参数类型 有4种参数类型,有时候很难记住它们的不同特征,下图对它们做一个总结,使之更容易比较和对照. 二.C#方法中的参数 1.值参数 使用值参数,通过复制实参的值到形参的方式把数据传递到方法.方法调用时,系统做如下操作: · 在栈中为形参分配空间 · 复制实参到形参 注:栈(先进后出)是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义:       堆(队列优先,先进先出)是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小. /…