【问题标题】:Share common properties with child objects与子对象共享公共属性
【发布时间】:2014-06-13 21:30:36
【问题描述】:

我很确定,这是一个简单的问题,但我现在卡住了。 我有以下设置:

public ParentClass()
{
    public long ID { get; set; }
    public String Title { get; set; }
    public String PropertyA { get; set; }
    public String PropertyB { get; set; }

    public ParentClass()
    {
        _child1 = new ChildClass1();
        _child1.ID = ID;
        _child1.Title = Title;
        _child1.PropertyA = PropertyA;

        _child2 = new ChildClass2();
        _child2.ID = ID;
        _child2.Title = Title;
        _child1.PropertyB = PropertyB;
    }

    private ChildClass1 _child1;
    private ChildClass2 _child2;
}

父类只是用来控制整体行为,子类做实际的工作(每个不同的部分)。我希望两个子类都知道 ID 和 Title。但是 Child1 应该只知道 PropertyA,而 Child2 应该知道 PropertyB。因此,每个孩子都会拥有由此产生的 3 个属性。我可以使用一些数据对象,但这会导致调用像 _child1.Properties.ID ... 是否有解决此类问题的最佳实践或模式?

【问题讨论】:

  • 这里真正的用例是什么?询问如何从Parent -> Child 传递数据是一个相当主观的问题。
  • 您的属性是字段。对理解这一点没有帮助。
  • Parentclass 创建一个控件,该控件由 2 个子控件(一个选择元素和一个列表)组成。父类在选择元素和列表之间同步数据。所以一个孩子代表一个选择元素,另一个是列表。
  • 贴出的代码似乎可以完成这项工作,那么这里的问题是什么?
  • 我同意詹姆斯的观点。突出的是 PropertyB 和 A (顺便说一句,这是一个字段)在父级中被复制,当你不能打扰时(例如,只有一个检查子级的吸气剂)。一般来说,就像 ID 一样,您必须将它们分开,您可以修改 getter 和 setter 以使它们紧密耦合,而不是希望它们保持不变。

标签: c# design-patterns


【解决方案1】:

您的代码看起来不错。无需将事情过度复杂化。

在我看来,PropertyA 和 PropertyB 在 ParentClass 中可能没有这些属性的支持值,而只是在 Childclasses 中获取和设置公共属性。

一般来说,最好通过让父级中的 getter 影响子类中的值来将它们紧密耦合,反之亦然,如果您希望它们在其生命周期内不会发生分歧。另一种方法是将它们全部设为readonly

【讨论】:

    猜你喜欢
    • 2018-07-03
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2020-06-10
    • 2013-05-23
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多