C# 当父类发生更改时,如何更新子类?

C# 当父类发生更改时,如何更新子类?,c#,inheritance,parent-child,C#,Inheritance,Parent Child,我弄明白这件事有点麻烦 我的代码结构如下: public class ParentClass { private double p_num; public ParentClass() { } public void AddSomething(double num) { System.Console.WriteLine(ParentNum + num); } public double ParentNum

我弄明白这件事有点麻烦

我的代码结构如下:

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?

因为
ChildClass
继承自
ParentClass
并不意味着
ChildClass
的每个实例都继承
ParentClass
实例的属性。它们是独立的对象


以现实世界为例,如果这是真的,那么如果一位母亲得了疤痕,她的所有孩子都会得到同样的疤痕。

p
c
是两个不同的对象。调用
c.AddSomething()
时,
c.ParentNum
的值是默认值
0.0

    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。

因为您正在对子类调用
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();
    }
}

如果您将Parent.p_num声明为static,则它将工作:

private static double p_num;
但我不确定这是否是你的意图。您的意思是让p_num共享类的所有实例吗

顺便说一下,您的类中有很多不必要的代码。这将有助于:

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; }
}
原因:

  • 无需指定默认构造函数
  • 使用自动属性而不是备份字段

如果您想要13,请在“c.AddSomething();”上方添加一行:“c.ParentNum=5.0;”,因为
p
c
不一样。谢谢Paul。是的,我希望在父对象的所有子对象之间共享父对象信息。我放了个屁。。。感谢您的代码清理,我是C#@ryrich的新手-您是说您将只拥有父类的一个实例吗?