ref问题,请讲解

    在本文之前有2篇介绍Ref和Out的文章,同学看后提出了以下问题

public static void ValueParam(string str)
{
   str = "251";
}
public static void RefParam(ref string str)
{
   str = "250";
}
public static void Main()
{
   string str = "249";
   ValueParam(str);
   Console.WriteLine(" Value Param:"+str);
   RefParam(ref str);
   Console.WriteLine(" Ref Param:"+str);
}
结果为:
Value Param:249  //这里结果为249和下面程序的b我就混淆搞不清楚了
Ref Param:250    //250我能理解

------------------------------------------------------------
public class MyClass 
{
  public static void TestRef(ref char i) 
  {

    i =  'b ';
  }
   
  public static void TestNoRef(char i) 
  {
    
    i =  'c ';
  }
   

  public static void Main() 
  { 
    char i =  'a ';    
    TestRef(ref i);  
    Console.WriteLine(i);
    TestNoRef(i);
    Console.WriteLine(i);
  }
}

  大家很容易看出输出结果是: 

b   //我也能理解
b   //这里用的是TestNoRef(i)为什么输出也是b呢?如果按上一个程序的思想结果应该是a才是啊 

==================================================================================

之所以出现上面的问题我想他是对C#的值传递和引用传递没有很好的搞清楚。

ref就是传递了引用,所以修改会被保存下来 
或者说
by ref 就是将参数的指针传给函数, 结果就是参数会被函数修改并且保存下来,影响下面要使用这参数的值
by val 就是传一个值的copy , 原参数在这次使用后不会被修改。讲到这我想大家应该可以明白了

程序部分讲解如下:

   string str = "249";                  //str="249"
   ValueParam(str);                //str="249",因为是by value的,所以str的引用不变,str的引用的还是之前的"249"对象
   Console.WriteLine(" Value Param:"+str);    //str="249"
   RefParam(ref str);                         //str="250",因为是by ref的,所以str的引用修改变成引用"250"对象
   Console.WriteLine(" Ref Param:"+str);      //str="250"

    char i =   'a  ';           //i= 'a '
    TestRef(ref i);           //i= 'b ',因为是by ref的,所以i的值修改了
    Console.WriteLine(i);     //i= 'b '
    TestNoRef(i);             //i= 'b ',因为是by value的,所以i不变,i的值还是之前的 'b '
    Console.WriteLine(i);     //i= 'b '


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值