小白请教: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必须在方法体内初始化