我有点麻烦搞清楚这一点。
我的代码结构如下:
public class ParentClass
{
private double p_num;
public ParentClass()
{
}
public void AddSomething(double num)
{
System.Console.WriteLine(ParentNum + num);
}
public double ParentNum
{
set { p_num = value; }
get { return p_num; }
}
}
public class ChildClass : ParentClass
{
private double c_num;
public ChildClass()
{
}
public void AddSomething()
{
base.AddSomething(ChildNum);
}
public double ChildNum
{
set { c_num = value; }
get { return c_num; }
}
}
public class Test
{
public static void Main()
{
ParentClass p = new ParentClass();
ChildClass c = new ChildClass();
c.ChildNum = 8.0;
p.ParentNum = 5.0;
c.AddSomething();
}
}
怎么打印8.0而不是13.0?
答案 0 :(得分:3)
因为ChildClass
继承自ParentClass
并不意味着ChildClass
的每个实例都继承了ParentClass
实例的属性。它们是独立的对象。
要给出一个真实世界的比喻,如果母亲有疤痕,那么她的所有孩子都会得到同样的疤痕。
答案 1 :(得分:2)
ParentClass p = new ParentClass();
ChildClass c = new ChildClass();
c.ChildNum = 8.0;
p.ParentNum = 5.0;
c.AddSomething();
p
和c
在这里没有任何共同之处!它们只是两个独立的对象。
选中此项以使其更清晰:
ChildClass c = new ChildClass();
c.ChildNum = 8.0;
c.ParentNum = 5.0;
c.AddSomething();
这将返回13。
答案 2 :(得分:1)
p
和c
是两个不同的对象。当您致电c.AddSomething()
时,c.ParentNum
的值为默认0.0
。
答案 3 :(得分:1)
如果您将Parent.p_num声明为静态,它将起作用:
private static double p_num;
但我不确定这是不是你的意图。你的意思是让p_num共享amogst类的所有实例吗?
顺便说一下,你的课程中有很多不必要的代码。这样做:
public class ParentClass
{
public void AddSomething(double num) {
System.Console.WriteLine(ParentNum + num);
}
public double ParentNum { get; set; }
}
public class ChildClass : ParentClass
{
public void AddSomething() {
base.AddSomething(ChildNum);
}
public double ChildNum { get; set; }
}
原因:
答案 4 :(得分:0)
因为您在子类上调用AddSomething
,这是ParentClass
的完全独立的实例。 ChildClass
是ParentClass
的子类,但这并不意味着它们都指向相同的ParentClass
。你基本上有两个对象,你只是在其中一个上调用一个操作。
public class Test
{
public static void Main()
{
ChildClass c = new ChildClass();
c.ChildNum = 8.0;
c.ParentNum = 5.0;
c.AddSomething();
}
}
应该给你想要的结果