为什么我这个输出的是:我今年1岁了和我今年2岁了?

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

慕勒4047504

2019-07-13 18:16


using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace Youeryuan

{

    class Program

    {

        static void Main(string[] args)

        {

            Child c1 = new Child("晓强", 3);

            Growth(c1);

            Growth(c1.Age);

            Console.ReadLine();           


        }

       

        static void Growth(Child chlid)

        {

            chlid.Age++;

            Console.WriteLine("我今年"+chlid.Age+"岁了1!");

           // Console.WriteLine("我又长大了一岁!");

            

        }

        static void Growth (int age)

        {

            age++;

            Console.WriteLine("我今年{0}岁了2!", age);

        }

       

    }

}


写回答 关注

5回答

  • 至尊丶龙猫
    2021-03-04 23:38:56

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;


    namespace ceshi1

    {

        class Program

        {

            class Child

            {

                private string name;


                public string Name

                {

                    get { return name; }

                    set { name = value; }

                }

                private int age;


                public int Age

                {

                    get { return age; }

                    set { age = value; }

                }

                public Child(string name, int age)

                {

                    this.name = name;

                    this.age = age;

                }

            }

            static void Main(string[] args)

            {


                Child c1 = new Child("晓强", 3);


                Growth(c1);


                Growth(c1.Age);


                Console.ReadLine();




            }




            static void Growth(Child chlid)

            {


                chlid.Age++;


                Console.WriteLine("我今年" + chlid.Age + "岁了1!");


                // Console.WriteLine("我又长大了一岁!");




            }


            static void Growth(int age)

            {


                age++;


                Console.WriteLine("我今年{0}岁了2!", age);


            }


        }

    }

    应该是构造方法没有给age赋值的错误,main方法中实例化Child类对象c1时传的参数3到构造方法为age赋值的代码错误,建议检查构造方法,如果没有给age赋值,则默认int型数据初始为0,也就会出现输出为  

    我今年1岁了!

    我今年2岁了!

  • 宝慕林6560916
    2020-04-04 18:30:11

    你的Main方法和两个Growth方法平级的,也就是说,程序开始时直接进入 Growth(Child child) , Child.Age默认取0,child.Age++ 后得1,这里输出了“我今年1岁了1!”。接下来上面的 Growth(c1.Age) 读取到的值为1,再传到Growth(int age)中,age读取到的值为1,age++ 得到2,故,这里输出“我今年2岁了2!” 

    望指点

  • 慕侠4016593
    2020-02-17 16:43:27

    应该是你的构造方法中没有给年龄Age初始化,导致c1对象Age取默认值0

  • Fly_Lollipop
    2019-09-06 17:41:04

      static void Growth (int age)

            {

                age++;

                Console.WriteLine("我今年{0}岁了2!", age);

            }

    上面代码你输出的age是这个方法内的值,在这个方法里age的初始值是零,你的代码age++,输出的结果自然就1啦

  • qq_慕函数2369942
    2019-07-18 16:48:37
    1. 首先你需要把两个输出语句中的child.Age和age都改成c1.Age,因为是输出对象的年龄属性必须用 对象.属性 这种方式输出.

    2. 其次你需要把两条输出语句放入主方法也就是Main函数内部执行,因为对象c1是在Main函数内部实例化的。

    3. 最后加油加油加油

用C#实现封装

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

78119 学习 · 182 问题

查看课程

相似问题