为什么运行结果是4岁,5岁,4岁????

来源:5-4 方法传参中的值类型和引用类型

慕侠2341482

2019-01-03 12:03

            Child child = new Child("刘小明", 3, Gender.女);

            int age = 3;

            Growth(child);//直接调用静态方法,类是引用类型,修改形参,实参child也被修改

            Growth(child.Age);//int是值类型,修改形参,实参未改变-----》??????但是为什么运行结果和视频中的不一样,我的改变了

            //Growth(ref age);

        }

        static void Growth(Child c)

            {

                c.Age++;

                Console.WriteLine("我是A方法,我今年{0}岁了",c.Age);

            }

          static void Growth(int age)

            {

               age++;

                Console.WriteLine("我是B方法,我今年{0}岁了", age);

            }

        static void Growth(ref int age)//???为什么跟视频中的相反,ref不是能使值类型按照引用类型传参,为什么颠倒了

        {

            age++;

            Console.WriteLine("我是C方法,我今年{0}岁了", age);

        }


写回答 关注

3回答

  • 慕勒4198758
    2019-03-11 13:54:03

    题主好像对方法理解有点错误啊,第二步,你的输出语句在方法里面,当你传的值是4,++之后肯定会变成5,这个时候输出肯定是5啦

    视频的输出都是写在方法调用之后,而不是方法体里面

  • 慕侠2341482
    2019-01-05 12:58:15

    代码第二步 Growth(child.Age);视频中一样的方法输出却是4岁,说传入的int类型是值类型,也就是复制副本,实际参数并未改变。

  • 全盛
    2019-01-03 14:53:41

    代码第一步 Growth(child); 此时child.Age为new Child("刘小明", 3, Gender.女);中所赋值的3。在static void Growth(Child c)中运行    c.Age++;为4岁。

    代码第二步 Growth(child.Age); 此时传递为第一步中运行后的结果4  所以传入方法中的参数就是4。在 static void Growth(int age) 中运行 age++; 为5。

    代码第三步 Growth(ref age);传递的值 为 int age = 3;  因此 static void Growth(ref int age)中  age++;结果为4。

    慕侠2341...

    代码第二步 Growth(child.Age);视频中一样的方法输出却是4岁,说传入的int类型是值类型,也就是复制副本,实际参数并未改变。

    2019-01-05 12:58:45

    共 1 条回复 >

用C#实现封装

C#视频教程教大家,用C#语言实现面向对象的封装

78012 学习 · 182 问题

查看课程

相似问题