[TestMethod] // ----------------------------------------------------------------------- public void TestMethod15() { 訂閱者 農夫 = new 訂閱者() { 字 = "農夫" }; 訂閱者 商人 = new 訂閱者() { 字 = "商人" }; 訂閱者 騎士 = new 訂閱者() { 字 = "騎士" }; 報社 王國日報 = new 報社(); //訂閱 王國日報.最新新聞 += 農夫.通知我; 王國日報.最新新聞 += 商人.通知我; 王國日報.最新新聞 += 騎士.通知我; string 消息1 = "魔王降臨啦!!!"; 王國日報.投稿新聞(消息1); string 消息2 = "勇者準備出發"; 王國日報.投稿新聞(消息2); 王國日報.最新新聞.Invoke("假新聞"); // Q: 如何避免被發送假新聞?? A: event keyword }
public void 通知我(object sender, EventArgs eventArgs) { 報社 報社 = sender as 報社; // KEY: object to everything 新聞 新聞 = eventArgs as 新聞; // KEY: EventArgs to everything Console.WriteLine($"我是{名字},我已經收到來自{報社.名稱}的{新聞.標題}:{新聞.內容}"); }
[TestMethod] // ----------------------------------------------------------------------- public void TestMethod4() { 訂閱者 農夫 = new 訂閱者() { 字 = "農夫" }; 訂閱者 商人 = new 訂閱者() { 字 = "商人" }; 訂閱者 騎士 = new 訂閱者() { 字 = "騎士" }; 報社 王國日報 = new 報社(); //訂閱 王國日報.最新新聞 += 農夫.通知我; 王國日報.最新新聞 += 商人.通知我; 王國日報.最新新聞 += 騎士.通知我; string 消息1 = "魔王降臨啦!!!"; 王國日報.投稿新聞(消息1); string 消息2 = "勇者準備出發"; 王國日報.投稿新聞(消息2); // 王國日報.最新新聞.Invoke("假新聞"); // 保護: 多了event keyword, 讓delegate依然能被外部加入( += )方法,又能禁止被外部執行。 }
protected void On收到最新新聞時(報社 報社, 新聞 新聞) { 最新新聞?.Invoke(報社, 新聞); }