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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 gyt_xtt 于 2014-4-14 12:06 编辑
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             Person p1 = new Person();
  6.             Person p2 = new Person("tom");
  7.             Person p3 = new Person("jerry",18);

  8.             Console.WriteLine("年龄是{0},名字叫{1}",p1.Age,p1.Name);
  9.             Console.WriteLine("年龄是{0},名字叫{1}", p2.Age, p2.Name);
  10.             Console.WriteLine("年龄是{0},名字叫{1}", p3.Age, p3.Name);
  11.             Console.ReadKey();
  12.         }
  13.     }

  14.     class Person
  15.     {
  16.         public Person()
  17.         {
  18.             Name = "未命名";
  19.             Age = 0;
  20.         }

  21.         public Person(string name)
  22.         {
  23.             this.Name = name;
  24.         }

  25.         public Person(string name, int age)
  26.         {
  27.             this.Name = name;
  28.             this.Age = age;
  29.         }

  30.         private string name;
  31.         private int age;

  32.         public string Name
  33.         {
  34.             get
  35.             {
  36.                 return name;
  37.             }
  38.             set
  39.             {
  40.                 this.name = value;
  41.             }
  42.         }

  43.         public int Age
  44.         {
  45.             get
  46.             {
  47.                 return age;
  48.             }
  49.             set
  50.             {
  51.                 this.age = value;
  52.             }
  53.         }
  54.     }
复制代码


这个输出之后,为什么p2的年龄显示为0.
p2明明调用了
  public Person(string name)
        {
            this.Name = name;
        }
这个构造函数,这里没有年龄,为什么显示年龄是0?

评分

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

查看全部评分

4 个回复

倒序浏览
建议亲  设置下断点 调试一下
看下p2实例化的时候 是调用的哪一个构造函数
回复 使用道具 举报
伪善者。 发表于 2014-4-14 10:05
建议亲  设置下断点 调试一下
看下p2实例化的时候 是调用的哪一个构造函数 ...

嗯 我在慢慢试试
回复 使用道具 举报
你在实例p2的时候并没有传入age参数,但是输出的时候,你要输出age,所以p2.age默认的还是调用无参的那个构造函数里的值,也就输出0了。
回复 使用道具 举报
你的age是int类型的,不赋值就是0.
你用构造函数不就是为了保护字段值不被改变吗?应该这样写吧.
  1. namespace ConsoleApplication1
  2. {

  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             Person p1 = new Person();
  8.             Person p2 = new Person("tom");
  9.             Person p3 = new Person("jerry");

  10.             Console.WriteLine("年龄是{0},名字叫{1}", p1.Age, p1.Name);
  11.             Console.WriteLine("年龄是{0},名字叫{1}", p2.Age, p2.Name);
  12.             Console.WriteLine("年龄是{0},名字叫{1}", p3.Age, p3.Name);
  13.             Console.ReadKey();
  14.         }
  15.     }

  16.     class Person
  17.     {
  18.         public Person()
  19.         {
  20.             name = "未命名";
  21.         }

  22.         public Person(string name)
  23.         {
  24.             this.name = name;
  25.         }

  26.         public Person(string name, int age)
  27.         {
  28.             this.name = name;
  29.             this.age = age;
  30.         }

  31.         string name;

  32.         public string Name
  33.         {
  34.             get { return name; }
  35.             
  36.         }
  37.         int age;

  38.         public int Age
  39.         {
  40.             get { return age; }
  41.             
  42.         }
  43.     }
  44. }
复制代码

评分

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

查看全部评分

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