日期:2014-05-18  浏览次数:20787 次

小白请教:C# ref关键字
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,
在方法中对参数所做的任何更改都将反映在该变量中。 若要使用 ref 参数,必须将参数作为 ref 
参数显式传递到方法。ref 参数的值被传递到 ref 参数。 传递到 ref 参数的参数必须最先初始化。
将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。 属性不是变量,
不能作为 ref 参数传递。


大家能讲一下ref关键字吗?用你自己理解的、直白的语言表述,不要像上面官方的语言。

------解决方案--------------------
假如说,你在一个方法A中调用方法B
你想给A方法中的变量(或者是其他地方的变量)N通过方法B来获取值
这时就要用到ref关键字了
例:
C# code

      public void A()
        {
            int n = "";
            B(ref n);
            //下面就可以用到 n 来作别的操作了
        }

        public void B(ref int n)
        {
            n = 1;//获取值过程
        }

------解决方案--------------------
在方法中对参数所做的任何更改都将反映在传入的变量中

class RefExample
{
static void Method(ref int i)
{
i = 44;
}
static void Main()
{
int val = 0;
Method(ref val);
// val is now 44
}
}

  
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 
http://feiyun0112.cnblogs.com/
------解决方案--------------------
int n 可以等于 "" 楼上的强人

out 和 ref 个人在用法上没发现什么区别

更深层次的没仔细联系过
------解决方案--------------------
引用调用参数

就是说,这个传递的是参数的实际地址,

当你的参数在方法中改变时,会影响到传进来的变量

比如说有个TEXT,如果是按值传递方法中做什么事情都和参数无关(参数不受影响)

但是按引用传递,方法中的参数值变了,TEXT也会跟着改变!
------解决方案--------------------
探讨
int n 可以等于 "" 楼上的强人

out 和 ref 个人在用法上没发现什么区别

更深层次的没仔细联系过

------解决方案--------------------
ref 方法外对参数先赋值一个初始值,方法中修改该参数的值,并最终将修改后的值传出方法。
out 方法外仅需要声明,方法中赋值,并传出,我觉得有点象方法的返回值。
------解决方案--------------------
函数就好像一个黑洞, 参数就是你扔进去一根绳子栓着的肉,
当你希望能钓上非肉, 或者其他肉, 用 ref 或者 out
当只是为了送肉进去, 不关心绳子收上来时钩着什么时, 不用加修饰符, 这时绳子收上来时, 会把你当时挂的肉再挂上, 就好像你没往里放一样.

(一根绳子只能挂一块肉, 肉有类型之分)

ref out 的都可以在洞里挂东西, 不同的是 out 必须先初始化吧.


------解决方案--------------------
ref 按引用传递参数,在方法内部对此参数做的更改,将影响到原来的值!
------解决方案--------------------
ref 实参实例化
out 形参实例化
------解决方案--------------------
ref 就是你传到方法里面的时候,可以不行行任何操作返回;
out 就是你传到方法里面的时候,必须要进行赋值才能返回。
简单吧?
------解决方案--------------------
参数引用传递。

当传递的参数是值类型时,比如int,string,bool值。
该参数在方法中被修改时,函数外的变量不会变。
比如

int a=10;
test(a);

public test(int a)
{
a++;
}
执行完test(a)之后,a的值还是10,而不是11。
想让执行完后a的值为11那就用ref修饰符

int a=10;
test(ref a);

public test(ref int a )
{
a++;
}
------解决方案--------------------
我的理解:
引用调用参数,也就数实参是已经定义好并且有初始的变量,并是用ref修饰。
然而形参也有ref修饰,并且形参的值改变会影响实参的值~
------解决方案--------------------
ref就是引用呀 貌似很好理解!
官方的解释也很清楚
楼上几位的例子也很详尽了!
------解决方案--------------------
ref out参数结果是一样的。他们都是引用变量的内存地址,可以改变变量的值。不同的是:
ref必须在方法体外初始化
out必须在方法体内初始化