我有以下情形。客户端代码只能访问FooHandler,而不是直接访问Foo实例。在C中实现链接事件的最佳方式是什么?
public delegate void FooLoaded(object sender, EventArgs e);
class Foo {
public event FooLoaded loaded;
/* ... some code ... */
public void Load() { load_asynchronously(); }
public void callMeWhenLoadingIsDone() { loaded(this,EventArgs.Empty); }
}
class FooHandler {
public event FooLoaded OneFooLoaded;
/* ... some code ... */
public void LoadAllFoos() {
foreach (Foo f in FooList) {
f.loaded += new FooLoaded(foo_loaded);
f.Load();
}
}
void foo_loaded(object sender, EventArgs e) {
OneFooLoaded(this, e);
}
}
然后,客户端将使用FooHandler类的OneFooLoaded事件来获取加载foos的通知。这个'事件链'是正确的事情吗?有没有其他的选择?我不喜欢这样(感觉不对,我无法准确表达原因),但是如果我希望处理程序成为访问点,我似乎没有多少选择。
我想开始我目前工作的项目之前,我曾见过这个简单得多,这让我的事情变得如此简单(并且更容易进行单元测试)。 – ForbesLindesay 2010-12-17 15:06:46