我有以下情形。客戶端代碼只能訪問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