Đúng, bạn chắc chắn đang thiếu một cái gì đó . Gotos thường được sử dụng, như bạn đã nói, để thực hiện chuyển giao quyền kiểm soát một chiều.
Tuy nhiên, các sự kiện không làm điều đó. Khi mã kích hoạt sự kiện, nó biết rõ rằng một khi sự kiện được xuất bản (hoặc được xử lý, xếp hàng, bắn ... vv) sẽ tiếp tục trên dòng tiếp theo trong mã tạo ra sự kiện.
Việc sử dụng goto tạo ra một khớp nối rất chặt chẽ giữa mã gọi câu lệnh đó và mã nằm ở đầu nhận. Nhà phát triển phải có kiến thức sâu sắc về cả hai nơi để sử dụng goto.
Mặt khác, mã kích hoạt các sự kiện thường không biết hoặc không quan tâm ai quan tâm đến việc lắng nghe sự kiện đó. Có thể có một người nghe. Hoặc có thể có 100 người nghe hoặc 0. Những người nghe đó có thể ở trong cùng một chương trình nơi sự kiện được tổ chức, hoặc họ có thể ở một ứng dụng hoàn toàn khác, hoặc họ có thể ở trên một máy khác. Theo như nhà xuất bản có liên quan, ngay khi anh ta tạo ra sự kiện, công việc của anh ta đã hoàn thành.
Nếu bạn ở với tôi cho đến nay, những gì tôi mô tả ở trên là trường hợp lý tưởng của mô hình pub / sub. Thật không may trong thế giới thực, mọi thứ không phải lúc nào cũng lý tưởng và có những trường hợp nhà xuất bản tạo ra một sự kiện, một người đăng ký được gọi, thay đổi toàn bộ trạng thái và đến khi thực thi mã thời gian quay trở lại nhà xuất bản "thế giới" bị đảo lộn. Và tôi chắc chắn rằng bạn đã từng gặp phải điều này trong quá khứ, bởi vì điều kiện này thường xuất hiện khi mô hình pub / sub được triển khai theo cách rất đơn giản (ví dụ: thông qua việc sử dụng các đại biểu hoặc sự kiện trong C # hoặc con trỏ chức năng / giao diện trong C / C ++).
Nhưng vấn đề này không nhất thiết là mẫu pub / sub mà là việc thực hiện nó. Đây là lý do tại sao nhiều hệ thống dựa vào hàng đợi để khi một sự kiện được xuất bản, nó chỉ được xếp hàng để được gọi sau đó cho nhà xuất bản cơ hội hoàn thành việc thực thi trong khi thế giới vẫn còn nguyên vẹn. Khi nhà xuất bản hoàn thành công việc, vòng lặp sự kiện (còn gọi là vòng gửi) sẽ bật ra khỏi các sự kiện và gọi người đăng ký.
return
,try/catch
,break
,continue
,switch
- đó là những tất cảgoto
với mức độ khác nhau của việc hạn chế xây dựng trong Chuyển coi là có hại có hại cho suy nghĩ về cách thức hoạt động mã..