黑马程序员技术交流社区
标题:
关于构造函数的一个问题,有代码,求帮助
[打印本页]
作者:
gyt_xtt
时间:
2014-4-14 01:24
标题:
关于构造函数的一个问题,有代码,求帮助
本帖最后由 gyt_xtt 于 2014-4-14 12:06 编辑
class Program
{
static void Main(string[] args)
{
Person p1 = new Person();
Person p2 = new Person("tom");
Person p3 = new Person("jerry",18);
Console.WriteLine("年龄是{0},名字叫{1}",p1.Age,p1.Name);
Console.WriteLine("年龄是{0},名字叫{1}", p2.Age, p2.Name);
Console.WriteLine("年龄是{0},名字叫{1}", p3.Age, p3.Name);
Console.ReadKey();
}
}
class Person
{
public Person()
{
Name = "未命名";
Age = 0;
}
public Person(string name)
{
this.Name = name;
}
public Person(string name, int age)
{
this.Name = name;
this.Age = age;
}
private string name;
private int age;
public string Name
{
get
{
return name;
}
set
{
this.name = value;
}
}
public int Age
{
get
{
return age;
}
set
{
this.age = value;
}
}
}
复制代码
这个输出之后,为什么p2的年龄显示为0.
p2明明调用了
public Person(string name)
{
this.Name = name;
}
这个构造函数,这里没有年龄,为什么显示年龄是0?
作者:
伪善者。
时间:
2014-4-14 10:05
建议亲 设置下断点 调试一下
看下p2实例化的时候 是调用的哪一个构造函数
作者:
gyt_xtt
时间:
2014-4-14 11:17
伪善者。 发表于 2014-4-14 10:05
建议亲 设置下断点 调试一下
看下p2实例化的时候 是调用的哪一个构造函数 ...
嗯 我在慢慢试试
作者:
别说话
时间:
2014-4-14 21:09
你在实例p2的时候并没有传入age参数,但是输出的时候,你要输出age,所以p2.age默认的还是调用无参的那个构造函数里的值,也就输出0了。
作者:
zhl406893081
时间:
2014-4-15 10:34
你的age是int类型的,不赋值就是0.
你用构造函数不就是为了保护字段值不被改变吗?应该这样写吧.
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Person p1 = new Person();
Person p2 = new Person("tom");
Person p3 = new Person("jerry");
Console.WriteLine("年龄是{0},名字叫{1}", p1.Age, p1.Name);
Console.WriteLine("年龄是{0},名字叫{1}", p2.Age, p2.Name);
Console.WriteLine("年龄是{0},名字叫{1}", p3.Age, p3.Name);
Console.ReadKey();
}
}
class Person
{
public Person()
{
name = "未命名";
}
public Person(string name)
{
this.name = name;
}
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
string name;
public string Name
{
get { return name; }
}
int age;
public int Age
{
get { return age; }
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2