static void Main(string[] args) { // Using delegate only /* var pub1 = new Publisher1(); * var sub1_1 = new Subscriber1(id: 1, publisher: pub1); * var sub1_2 = new Subscriber1(id: 2, publisher: pub1); * pub1.Publish(100); */ // Thêm "event" keyword vào, cũng tương tự như trên với Publisher2 và Subscriber2, tuy nhiên phải xem phần Error // Khác biệt giữa delegate và event: // _ Event có thể được khai báo trong interface, Delegate thì không // _ Event chỉ có thể được gọi (invoked) ở bên trong class chứa nó, Delegate thì có thể được gọi ở bất cứ đâu (Tùy thuộc vào access modifier) // _ Event ngăn chặn việc gán (assign) ngoài lớp // Using EventHandlers var pub3 = new Publisher3(); var sub3_1 = new Subscriber3(id: 1, publisher: pub3); var sub3_2 = new Subscriber3(id: 2, publisher: pub3); pub3.Publish(); // Như vậy với EventHandler // object sender là publisher, establisher, noticer, broadcaster ... có chức năng truyền thông tin tới những subscriber // EventArgs là dữ liệu pass từ publisher đi theo Console.ReadKey(); }
public Subscriber3(int id, Publisher3 publisher) { this.id = id; this.publisher = publisher; publisher.OnChange += Reciever; }