Tôi có kịch bản sau đây. Mã máy khách chỉ có quyền truy cập vào FooHandler, không trực tiếp đến các cá thể Foo.cách tốt nhất để thực hiện các sự kiện xích trong 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);
}
}
Sau đó, khách hàng sẽ sử dụng sự kiện OneFooLoaded của lớp FooHandler để nhận thông báo tải foos. Đây có phải là 'sự kiện chuỗi' điều đúng đắn phải làm không? Có lựa chọn thay thế nào không? Tôi không thích điều này (nó cảm thấy sai, tôi không thể diễn tả chính xác tại sao), nhưng nếu tôi muốn người xử lý là điểm truy cập tôi dường như không có nhiều lựa chọn thay thế.
Tôi ước gì tôi đã thấy điều này trước khi bắt đầu dự án tôi hiện đang làm việc, đã làm cho mọi thứ trở nên đơn giản hơn nhiều đối với tôi (và dễ dàng hơn nhiều đối với việc kiểm tra đơn vị). – ForbesLindesay