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

相关参考

知识大全 .net程序员的盲点(一):ref,out ,params的区别

  C#中有三个关键字refoutparams虽然本人不喜欢这三个关键字因为它们疑似破坏面向对象特性但是既然m$把融入在c#体系中那么我们就来认识一下参数修饰符refoutparams吧还有它们的区别

知识大全 ASP.NET教程:Ref和Out关键字异同

ASP.NET教程:Ref和Out关键字异同  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  类型

知识大全 正确理解C#中的ref关键字(续)[2]

正确理解C#中的ref关键字(续)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!那么我们再来

知识大全 正确理解C#中的ref关键字(续)[1]

正确理解C#中的ref关键字(续)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!前几天写了一

知识大全 c#中通过值和引用传递参数

  在C#中既可以通过值也可以通过引用传递参数通过引用传递参数允许函数成员(方法属性索引器运算符和构造函数)更改参数的值并保持该更改若要通过引用传递参数请使用ref或out关键字为简单起见本主题的示例

知识大全 正确理解C#中的关键字[1]

正确理解C#中的关键字[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!最近有人问到ref关键字

知识大全 Out Of Memory的分析及诊断方法

OutOfMemory的分析及诊断方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  首先什么是

知识大全 全面剖析C#接口编程之定义接口

全面剖析C#接口编程之定义接口  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  从技术上讲接口是一

知识大全 横向技术分析C#、C++和Java优劣

横向技术分析C#、C++和Java优劣  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  C#诞生之

知识大全 oraclePL/SQL之隐式游标和ref游标总结

oraclePL/SQL之隐式游标和ref游标总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!