黑马程序员技术交流社区

标题: ref/out区别 [打印本页]

作者: 一叶一花    时间: 2014-2-15 15:43
标题: ref/out区别
本帖最后由 一叶一花 于 2014-2-15 22:10 编辑

最好能够举例说明一下
作者: 许庭洲    时间: 2014-2-15 17:44
1. 引用型参数,以ref修饰符声明;
using System;
class Test
{
     static void Swap(ref int x, ref int y)
   {
     int temp = x;
     x = y;
     y = temp;
   }
   static void Main()
   {
       int i=33,j=44;
       Swap(ref i, ref j);
       Console.WriteLine("i={0},j={1}",i,j);
   }
}
//////////////////////////////////////////////////////////////////////
编译上述代码,程序将输出:
  i=2,j=1
//////////////////////////////////////////////////////////////////////

2. 输出参数,以out修饰符声明;
using System;
calss Test
{
      static void SplitPath(string path,out string dir,out string name)
      {
            int i =path.Length;
            while(i>0)
            {
                   char ch = path[i-1];
                   if(ch=='\\'||ch'/'||ch==':')
                          break;
                   i--;
            }
            dir = path.Substring(0,i);
            name = path.Substring(i);
    }
    static void Main()
    {
         string dir,name;
         SplitPath("c:\\Windows\\System\\hello.txt",out dir,out name);
         Console.WriteLine(dir);
         Console.WriteLine(name);
   }
}
///////////////////////////////////////////////////////////////////////
程序的输出将会是:
c:\Windows\System\
hello.txt
///////////////////////////////////////////////////////////////////////
注意: 变量dir和name在传递给SplitPath之前并没有初始化,在调用之后它们则有了明确的值。

作者: 一点红    时间: 2014-2-15 21:51
两者都是按地址传递的,使用后都将改变原来的数值。ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以必须初始化一次。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2