1

我为这个问题的抽象性质道歉(出于商业原因无法发布真实代码),但我继承了一些我认为在结构上是错误的代码,我希望有人验证它是错误的。关于我如何正确处理的一些建议,因为我的 OO 技能不是他们应该具备的,这将是非常棒的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Mynamespace
{
    public class TopClass
    {
        private MiddleClass middleClass;

        public TopClass()
        {
            this.middleClass = new MiddleClass();
        }

        public void SomeEventOccured()
        {
            BottomClass b = new BottomClass();
            this.middleClass.NewBottomClass(this, b);
        }
    }

    public class MiddleClass
    {
        private List<BottomClass> bottomClasses;

        public void NewBottomClass(TopClass topClass, BottomClass newBottomClass)
        {
            // Need some functionality on TopClass here or use of it other properties.
            // topClass.SomethingElse...

            bottomClasses.Add(newBottomClass);
        }
    }

    public class BottomClass
    {
        // Any old class structure
    }
}

查询是围绕中间类方法中父类的使用,我认为将父类传递给每个调用以便中间类可以使用它的方法很奇怪。有什么建议么?

更新:

我们正在考虑解决这个问题的是:使用委托并将它们设置在底层类中,以便在执行方法的所有区域中调用顶层类。同样,在顶级类中访问的属性将通过简单的委托方法公开。在我们看来,这消除了循环所有权/引用,取而代之的是对象之间的双向通信。想法?

4

2 回答 2

0

像这样在 Child 类上创建一个属性

public TopClass Parent {get;private set;}

然后在构造函数中设置

public MiddleClass(TopClass parent)
{
    this.Parent = parent;
}

public TopClass()
{
   this.middleClass = new MiddleClass(this);
}

然后,您可以在 MiddleClass 中使用 Parent 而无需一直传递它。

于 2013-06-07T10:20:50.710 回答
0

您可以定义一个类似实现的接口。这将使中产阶级知道存在实现接口的东西,但不直接知道它是什么。IDoesWhatTopClassDoesTopClassTopClass

然后,为了消除每次都传递引用的需要,可以保存对通过构造函数传入Middleclass的实例的成员引用。IDoesWhatTopClassDoes

于 2013-06-07T10:35:38.467 回答