“顶级”类将一个事件附加到一个可能在callstack中“5+层以下”的类的最佳设计决策是什么?附加到C#中的调用堆栈中的事件的最佳方法?
例如,也许MainForm产生了一个对象,并且该对象产生了其他几个对象调用的调用堆栈。最明显的方法是将事件链接到对象层次结构,但这看起来很混乱,需要很多工作。
另一个解决方案是使用观察者模式,通过创建一个可公开访问的静态对象来暴露事件,并充当底层对象和顶层“表单”之间的代理。
有什么建议吗?
这是一个伪代码示例。在这个例子中,MainForm实例化'SomeObject',并附加到一个事件。 'SomeObject'附加到它实例化的对象上,以便将事件传递给MainForm侦听器。
class Mainform
{
public void OnLoad()
{
SomeObject someObject = new SomeObject();
someObject.OnSomeEvent += MyHandler;
someObject.DoStuff();
}
public void MyHandler()
{
}
}
class SomeObject
{
public void DoStuff()
{
SomeOtherObject otherObject = new SomeOtherObject();
otherObject.OnSomeEvent += MyHandler;
otherObject.DoStuff();
}
public void MyHandler()
{
if(OnSomeEvent != null)
OnSomeEvent();
}
public event Action OnSomeEvent;
}
很好的答案!谢谢。 – user43823 2008-12-06 20:14:57