Khi nào chúng ta phải sử dụng toán tử này theo sự kiện? Cách sử dụng của nó là gì?Điều đó nghĩa là gì trong C#: sử dụng - = toán tử theo sự kiện?
Trả lời
Cũng giống như + = đăng ký bạn một trình xử lý cho sự kiện, - = hủy đăng ký nó.
Sử dụng nó khi bạn không còn muốn một trình xử lý cụ thể được gọi khi sự kiện được nâng lên. Bạn thường chỉ cần sử dụng nó thành phần nâng cao sự kiện là sống lâu hơn so với người xử lý sự kiện - nếu bạn không hủy đăng ký, "người tổ chức sự kiện" có hiệu quả có tham chiếu đến trình xử lý, vì vậy có thể giữ cho nó tồn tại lâu hơn bạn muốn.
Như đã đề cập trong ý kiến:
-=
sẽ chỉ xóa trình xử lý đơn; nếu có nhiều trình xử lý được đăng ký (thậm chí sử dụng cùng một ủy nhiệm chính xác), nó sẽ vẫn chỉ giảm số lượng bộ điều khiển bằng 1. Ví dụ cuối cùng của trình xử lý được chỉ định là trình xử lý được loại bỏ. (Vì vậy, nếu trước đây bạn đã xử lý A, B, A, C đã đăng ký theo thứ tự đó và xóa A, bạn sẽ kết thúc bằng A, B, C.)-=
không gây ra lỗi nếu trình xử lý được chỉ định chưa được đăng ký với người được ủy quyền; nó chỉ bỏ qua yêu cầu. Điều này đúng ngay cả khi sự kiện không có trình xử lý nào được đăng ký vào lúc này.
Bạn xóa chức năng Eventhandler. C# Tutorial, Events and Delegates
Cũng giống như bạn có thể thêm trình xử lý sự kiện qua +=
, bạn có thể xóa chúng qua -=
.
Ví dụ:
mybutton.Click += new EventHandler(myhandler);
Bạn sau đó có thể loại bỏ nó như thế này:
mybutton.Click -= new EventHandler(myhandler);
... bởi vì xử lý sự kiện cho cùng phương pháp và ví dụ tương đương (do đó bạn không cần để giữ lại tham chiếu đến trình xử lý bạn đã sử dụng với +=
và sử dụng trình xử lý đó với -=
).
Các +=
và -=
khai thác có thể được sử dụng trong C# để thêm/xóa xử lý sự kiện đến/từ một trong những sự kiện của một đối tượng:
// adds myMethod as an event handler to the myButton.Click event
myButton.Click += myMethod;
Sau khi mã trên chạy, phương pháp myMethod
sẽ được gọi mỗi khi myButton
được nhấp.
// removes the handler
myButton.Click -= myMethod;
Sau khi mã trên chạy, nhấp vào myButton
sẽ không còn gây myMethod
được gọi.
Tôi nghi ngờ rằng logic nền của + = là thêm trình xử lý vào danh sách/mảng xử lý sự kiện cho sự kiện đã cho. Khi - = được sử dụng, nó so sánh đối số bàn tay phải của bạn với danh sách các trình xử lý sự kiện mà nó đang giữ cho sự kiện này và xóa nó khỏi danh sách. Nếu bạn thực hiện nhiều + = cho một sự kiện cụ thể, thì mỗi trình xử lý sẽ được gọi.
Nói cách khác: + = nghĩa là thêm phương thức vào danh sách các phương thức để gọi khi sự kiện xảy ra. - = nghĩa là xóa phương thức đã chỉ định khỏi danh sách các phương thức cần gọi.
Nếu tất cả bị xóa, sự kiện sẽ không có trình xử lý và sự kiện sẽ bị bỏ qua.
- 1. sử dụng toán tử có điều kiện
- 2. Toán tử '=>' có nghĩa là gì trong C#?
- 3. Toán tử C# => có nghĩa là gì?
- 4. Toán tử void *() có nghĩa là gì?
- 5. Ý nghĩa của toán tử & điều hành là gì?
- 6. Sử dụng toán tử NOT trong điều kiện IF
- 7. Ưu tiên của toán tử dấu phẩy bên trong toán tử điều kiện trong C++ là gì?
- 8. Toán tử # :: có nghĩa là gì?
- 9. Tuyên bố có điều kiện sử dụng toán tử bitwise
- 10. Sử dụng hợp lệ toán tử có điều kiện?
- 11. Toán tử const có ý nghĩa gì khi được sử dụng với phương thức trong C++?
- 12. Sử dụng toán tử so sánh bên ngoài điều kiện
- 13. Điều gì: :: có nghĩa là trong C++?
- 14. Toán tử `#` có nghĩa là gì trong Scala?
- 15. Điều gì! == toán tử so sánh trong PHP nghĩa là gì?
- 16. toán tử "??" trong C# là gì?
- 17. Toán tử điều kiện trong Python?
- 18. Trong F #, toán tử >> có nghĩa là gì?
- 19. Điều đó thực sự có nghĩa là ngôn ngữ lập trình là gì?
- 20. Sự khác biệt của toán tử điều kiện giữa C và C++
- 21. + = toán tử với Sự kiện
- 22. toán tử điều kiện trong Velocity
- 23. Toán tử điều kiện trong Transact-sql
- 24. Toán tử điều kiện khác trong C++ làm gì cho tôi?
- 25. Quá tải toán tử + = sự kiện
- 26. Cái gì? toán tử có nghĩa là trong C# sau khi khai báo kiểu?
- 27. Unshelving in TFS: Điều đó nghĩa là gì?
- 28. Phiên bản Python của toán tử điều kiện C# (?)
- 29. Toán tử Bash <<< có nghĩa là gì?
- 30. Các loại toán tử trả về trong C++ là gì?
+1. Cũng cần lưu ý rằng việc không hủy đăng ký một sự kiện thường là nguyên nhân của một chương trình hết bộ nhớ, vì nó ngăn các đối tượng trở thành đủ điều kiện cho GC. – RichardOD
Jon, tôi hơi sợ hãi bởi thực tế chúng tôi đều bắt đầu câu trả lời của mình với "Just as ..." ;-) –
phiên bản VB.NET của '- =' ..Tôi có nghĩa là cách hủy đăng ký từ một biến cố..? – dotNETbeginner