【发布时间】:2009-07-12 08:08:35
【问题描述】:
我有以下情况。客户端代码只能访问 FooHandler,不能直接访问 Foo 实例。
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 的通知。这种“事件链”是正确的做法吗?有其他选择吗?我不喜欢这样(感觉不对,我无法准确表达原因),但如果我希望处理程序成为访问点,我似乎没有很多选择。
【问题讨论】: