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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋健 中级黑马   /  2013-3-12 17:55  /  1322 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面代码是实现变量值交换,在定义交换方法Change的时候,
形参必须用ref关键字修饰才可以实现值交换,为什么?
这个和值传递及引用传递有关系吗?
        static void Main(string[] args)
        {
            int n1 = 10;
            int n2 = 20;
            Console.WriteLine("交换前n1={0},n2={1}",n1,n2);
            Change(ref n1,ref n2);
            Console.WriteLine("交换后n1={0},n2={1}", n1, n2);
            Console.ReadKey();
            
        }
        public static void Change(ref int n1,ref int n2)//声明交换函数
        {
            int temp = n1;
            n1 = n2;
            n2 = temp;
        }

评分

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

查看全部评分

2 个回复

倒序浏览
函数的ref和out参数
1。 函数参数默认是值传递的,也就是“复制一份”;
      例如:
      int age=20;
      IncAge(age);
      Console.WriteLine("age={0}",age);
2.ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需初始化,而且外部初始化也没用;
3.ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值。

评分

参与人数 2技术分 +1 黑马币 +12 收起 理由
张文 + 1
宋健 + 12 谢谢

查看全部评分

回复 使用道具 举报
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。或者可以这样理解,加了ref就是把引进的参数直接拿来用,所以方法里面对参数的改变能影响到方法外部,如果不加的话是生成一个新的变量指向原理的那个参数,而方法里面的更改对原参没有任何影响。

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马