知识大全 全面分析C#方法中的ref和out
Posted 变量
篇首语:知识可羡,胜于财富。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 全面分析C#方法中的ref和out相关的知识,希望对你有一定的参考价值。
全面分析C#方法中的ref和out 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ref 通常我们向方法中传递的是值 方法获得的是这些值的一个拷贝 然后使用这些拷贝 当方法运行完毕后 这些拷贝将被丢弃 而原来的值不将受到影响 此外我们还有其他向方法传递参数的形式 引用(ref)和输出(out) 有时 我们需要改变原来变量中的值 这时 我们可以向方法传递变量的引用 而不是变量的值 引用是一个变量 他可以访问原来变量的值 修改引用将修改原来变量的值 变量的值存储在内存中 可以创建一个引用 他指向变量在内存中的位置 当引用被修改时 修改的是内存中的值 因此变量的值可以将被修改 当我们调用一个含有引用参数的方法时 方法中的参数将指向被传递给方法的相应变量 因此 我们会明白 为什么当修改参数变量的修改也将导致原来变量的值 创建参数按引用传递的方法 需使用关键字ref 例;
using System; class gump public double square(ref double x) x=x*x; return x;
class TestApp public static void Main() gump doit=new gump();
double a= ; double b= ;
Console WriteLine(\\ Before square >a= b= \\ a b);
b=doit square(ref a); Console WriteLine(\\ After square >a= b= \\ a b);
通过测试 我们发现 a的值已经被修改为 了
out 通过指定返回类型 可以从方法返回一个值 有时候(也许还没遇到 但是我们应该有这么个方法) 需要返回多个值 虽然我们可以使用ref来完成 但是C#专门提供了一个属性类型 关键字为out 介绍完后 我们将说明ref和out的区别 通过使用out关键字 我们改变了三个变量的值 也就是说out是从方法中传出值
using System; class gump public void math_routines(double x out double half out double squared out double cubed)//可以是:public void math_routines(//ref double x out double half out double squared out double cubed)//但是 不可以这样:public void math_routines(out double x out double half out double squared out double cubed) 对本例来说 因为输出的值要靠x赋值 所以x不能再为输出值 half=x/ ; squared=x*x; cubed=x*x*x;
class TestApp public static void Main() gump doit=new gump();
double x = ; double half = ; double squared = ; double cubed = ; [Page] /* double x = ; double half ; double squared ; double cubed ; */
Console WriteLine(\\ Before method >x = \\ x ); Console WriteLine(\\ half = \\ half ); Console WriteLine(\\ squared = \\ squared ); Console WriteLine(\\ cubed = \\ cubed );
doit math_rountines(x out half out squared out cubed ); Console WriteLine(\\ After method >x = \\ x ); Console WriteLine(\\ half = \\ half ); Console WriteLine(\\ squared = \\ squared ); Console WriteLine(\\ cubed = \\ cubed );
cha138/Article/program/net/201311/15302相关参考