如何维护属性中的状态,需要从(种)父/子关系中的不同类访问?

时间:2015-11-09 14:43:05

标签: c# properties getter-setter

我有一个更复杂的结构,其中一些“子”类被添加到“父”类作为子视图。因此,我有一个名为currentSelectedDate的变量,它应该可以在所有连接的类中访问。我目前的结构如下所示:

A类(最顶层的“父母”):

private DateTime currentSelectedDate;
public DateTime CurrentSelectedDate {
    get
    {
        if (this.dayHeader != null)
        {
            return this.dayHeader.CurrentSelectedDate;
        }
        else
        {
            return this.currentSelectedDate;
        }
    }
    set
    {
        this.currentSelectedDate = value;
        if (this.dayHeader != null)
        {
            this.dayHeader.CurrentSelectedDate = value;
        }
    }
}

B级(A / dayHeader的“孩子”):

private DateTime currentSelectedDate;
public DateTime CurrentSelectedDate {
    get
    {
        if (this.weekdayScroller != null)
        {
            return this.weekdayScroller.CurrentSelectedDate;
        }
        else
        {
            return this.currentSelectedDate;
        }
    }
    set
    {
        this.currentSelectedDate = value;
        if (this.weekdayScroller != null)
        {
            this.weekdayScroller.CurrentSelectedDate = value;
        }
    }
}

C级(B / weekdayScroller的“子”):

public DateTime CurrentSelectedDate { get; set; }

此处仅显示从父项到子项的方向,其中属性用于传播数据。在向后的方向,我使用事件。这种方法的缺点是我必须在每个类中多次存储值。另外,如果我在一个类中,我必须手动设置this.currentSelectedDate的值,还要设置其他类(例如dayHeader.CurrentSelectedDate)(setter / getter只能由外部调用使用)

对于A类,隐藏了C类(weekdayScroller)。

C类(weekdayScroller)也被其他类使用,所以我必须直接在其中维护属性currentSelectedDate

还要注意什么时候初始化。例如。在创建A类时,currentSelectedDate已设置,但B类尚未存在。因此null检查。

我现在的问题是,如果这是处理所有阶级之间的国家传播的好方法,或者是否有更好的方法。

1 个答案:

答案 0 :(得分:1)

有更好的方法吗?不是我知道的。我理解这种设计的缺点。

如果要设置的变量只有一个值(所以父子关系是1:1),为什么不把它放在你引用的共享类中。它实际上是相同的,但可能更容易概述发生在哪里以及它们的责任。