A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁健1 中级黑马   /  2012-9-11 14:42  /  1775 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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修饰参数的时候,不是不传值,只返回值吗?
是我理解的错误码?帮帮忙,万分感谢~~~

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

5 个回复

正序浏览
out关键字在方法结束前必须赋值,out是把方法内部的值传到方法外部,ref既能把方法外部的直传进来,也能把方法内部的值传出去,out和ref修饰的参数传递的是引用

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
许庭洲 发表于 2012-9-11 15:00
是的,太有才了!

灰常感谢~~
回复 使用道具 举报
梁健1 发表于 2012-9-11 14:54
意思是,外部的值是可以传到内部的,但是这个值没用,只有内部传给外部的值才可以作为其他用处?
是不是 ...

是的,太有才了!
回复 使用道具 举报
许庭洲 发表于 2012-9-11 14:47
out是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。

意思是,外部的值是可以传到内部的,但是这个值没用,只有内部传给外部的值才可以作为其他用处?
是不是能这样理解,out和ref或者不加关键字的参数,参数的值是可以传递的,但是这三种关键字限制了参数的值的使用范围?
就比如上面的a,在刚进入Test()函数的时候,值是1,但是,由于有out修饰,所以这个值是没用的,必须在内部给他赋值才能使用?
回复 使用道具 举报
out是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马