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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© weiwei10153 高级黑马   /  2014-2-26 22:31  /  1485 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 weiwei10153 于 2014-2-27 19:13 编辑

求高手指导一下 ,代码在下面
本人最近刚学基础知识
第一个我知道输出18,但第二个为什么输出20?
ref不就是修饰的是引用类型吗?为什么加了ref输出结果不一致?

class Program
{
        static void Main(string[] args)
        {
            Person p1 = new Person() { Age = 18 };
            Test1(p1);
            Console.WriteLine(p1.Age);           //18
            Test2(ref p1);
            Console.WriteLine(p1.Age);           //20    这个为什么是20 ?
            Console.ReadKey();
        }

        static void Test1(Person p)
        {
            p = new Person() { Age = 20 };
        }

        static void Test2(ref Person p)
        {
            p = new Person() { Age = 20 };
        }
}

class Person
{
      public int Age { get; set; }
}

明白了,多谢!

1.png (133.44 KB, 下载次数: 16)

1.png

1 个回复

正序浏览
ref传过去的是p1的地址,而非p1的值,所以经过Test2();之后也是在改p1这个地址里的值,所以p1的值也相应的变成了后面Test2();赋予的值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马