c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区别

//#define Test

using System;



namespace Wrox.ProCSharp.ParameterTestSample
...{

class ParemeterTest
 
...{
       
staticvoid TestInt(int[] ints,int i)
...{
 ints[
0] =100;
i
=100;
}


 
staticvoid TestInt(int[] ints, refint i)
...{
     ints[
0] =200;
     i
=200;
}


staticvoid TestInt2(int[] ints, outint i)
...{
     ints[
0] =300;
     i
=300;
}



publicstaticvoid Main()
...{
     
int i=0;
     
int[] ints =...{0,1,2,3,4};

      Console.WriteLine(
"-----------TestInt------------------");

      Console.WriteLine(
"i={0}",i);
      Console.WriteLine(
"ints[0]={0}",ints[0]);
      Console.WriteLine(
"------------------------------------");

      
//默认情况下,c#所有参数都是通过值引用的,所以值类型i在上面的函数调用时,传送的只是一个副本,函数只是在调用过程中影响了副本的值,对i值实际并没有影响
    
 TestInt(ints, i);

      Console.WriteLine(
"i={0}",i);//这里输出的i值仍然是0
    
 Console.WriteLine("ints[0]={0}",ints[0]);
      Console.WriteLine(
"------------------------------------");

    
//如果要改变i的值,可以用ref让参数i通过引用传送给函数
   
 TestInt(ints, ref i);

      Console.WriteLine(
"i={0}",i);//这里输出的i值为200
    
 Console.WriteLine("ints[0]={0}",ints[0]);
      Console.WriteLine(
"------------------------------------");

  
//要改变i的值,也可以通过out关键字让
      TestInt2(ints, out i);

      Console.WriteLine(
"i={0}", i);//这里输出的i值为300
      Console.WriteLine("ints[0]={0}", ints[0]);
      Console.WriteLine(
"------------------------------------");

    
/ /ref与out很相似,但有也区别,ref必须要求参数初始化,out则不需要
   
#if Test//要测试下面的二行,把代码第一行#define Test去掉注释即可
    
int j;
     SomeFunction(ints,
ref j);//编译时会报错: 使用了未赋值的局部变量“j”
  
#endif

    
int k;
    TestInt2(ints,
out k);
    Console.WriteLine(
"k={0}", k);
    Console.WriteLine(
"------------------------------------");

    Console.ReadLine();
   }

}


}

运行结果;

 

-----------TestInt------------------
i=0
ints[0]=0
------------------------------------
i=0
ints[0]=100
------------------------------------
i=200
ints[0]=200
------------------------------------
i=300
ints[0]=300
------------------------------------
k=300
------------------------------------

文章来源:http://www.cnblogs.com/yjmyzz/archive/2007/12/09/988590.html  Jimmy.Yang

转载于:https://www.cnblogs.com/dean-Wei/archive/2013/06/01/3113379.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值