黑马程序员技术交流社区

标题: out关键字调试时的疑惑 [打印本页]

作者: 梁健1    时间: 2012-9-11 14:42
标题: out关键字调试时的疑惑
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace out的练习
{
    class Program
    {
        static void Main(string[] args)
        {
            int num = 1;
            Console.WriteLine(num);
            Test(out num);
            Console.WriteLine(num);
            Console.ReadKey();
        }

        public static void Test(out int a )//在调试的时候,刚进入这个方法的时候,其实a的值是1,但是有out修饰,a必须重新赋值?
        {   
            a = 500;//a必须要赋值
            Console.WriteLine(a);
            
            int b = 20;
            a = b;
            
            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.ReadKey();
        }
    }
}

在调用Test()方法时,参数a的值可以观察到是1,说明是num传给a的值,但是out修饰参数的时候,不是不传值,只返回值吗?
是我理解的错误码?帮帮忙,万分感谢~~~
作者: 许庭洲    时间: 2012-9-11 14:47
out是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。
作者: 梁健1    时间: 2012-9-11 14:54
许庭洲 发表于 2012-9-11 14:47
out是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。

意思是,外部的值是可以传到内部的,但是这个值没用,只有内部传给外部的值才可以作为其他用处?
是不是能这样理解,out和ref或者不加关键字的参数,参数的值是可以传递的,但是这三种关键字限制了参数的值的使用范围?
就比如上面的a,在刚进入Test()函数的时候,值是1,但是,由于有out修饰,所以这个值是没用的,必须在内部给他赋值才能使用?
作者: 许庭洲    时间: 2012-9-11 15:00
梁健1 发表于 2012-9-11 14:54
意思是,外部的值是可以传到内部的,但是这个值没用,只有内部传给外部的值才可以作为其他用处?
是不是 ...

是的,太有才了!
作者: 梁健1    时间: 2012-9-11 15:21
许庭洲 发表于 2012-9-11 15:00
是的,太有才了!

灰常感谢~~
作者: 李 玉林    时间: 2012-9-11 19:28
out关键字在方法结束前必须赋值,out是把方法内部的值传到方法外部,ref既能把方法外部的直传进来,也能把方法内部的值传出去,out和ref修饰的参数传递的是引用




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