知识大全 全面分析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

相关参考