我为这个问题的抽象性质道歉(由于商业原因不能发布实际代码),但我继承了一些我认为在结构方面错误的代码,我希望有人认为它是错误的。关于我如何能够正确行事的一些建议,因为我的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
}
}
查询是围绕中间类方法中父类的使用,我认为将父进程传递给每个调用是很奇怪的,所以中间类可以使用它上面的方法。有什么建议吗?
更新
我们正在考虑解决这个问题的方法是:使用委托并在底层类中设置它们以调用执行方法的所有区域中的顶级类。同样,顶级类中访问的属性将通过简单的委托方法公开。在我们看来,这将删除循环所有权/引用,并将其替换为对象之间的双向通信。想法?
答案 0 :(得分:0)
在Child类上创建一个属性,如此
public TopClass Parent {get;private set;}
然后在构造函数
中设置它public MiddleClass(TopClass parent)
{
this.Parent = parent;
}
public TopClass()
{
this.middleClass = new MiddleClass(this);
}
然后你可以在MiddleClass中使用Parent而不是一直传递它。
答案 1 :(得分:0)
您可以定义IDoesWhatTopClassDoes
TopClass
,TopClass
实现Middleclass
。这将允许中产阶级知道实现接口的东西存在,但不能直接知道IDoesWhatTopClassDoes
是什么。
然后,为了消除每次传递引用的需要,{{1}}可以保存对通过构造函数传入的{{1}}实例的成员引用。