Đối với câu hỏi cụ thể "Đăng ký sự kiện sẽ không ảnh hưởng đến việc thu thập pClass (làm nhà xuất bản).
Đối với GC nói chung (cụ thể là mục tiêu): tùy thuộc vào việc MyFunction là tĩnh hay dựa trên thể hiện.
Một đại biểu (chẳng hạn như đăng ký sự kiện) cho một phương pháp thể hiện bao gồm tham chiếu đến cá thể đó. Vì vậy, có, đăng ký sự kiện sẽ ngăn GC. Tuy nhiên, ngay khi đối tượng xuất bản sự kiện (pClass ở trên) đủ điều kiện để thu thập, điều này không còn là vấn đề nữa.
Lưu ý rằng đây là một chiều; tức là nếu chúng tôi có:
publisher.SomeEvent += target.SomeHandler;
thì "nhà xuất bản" sẽ giữ "mục tiêu" còn hoạt động, nhưng "mục tiêu" sẽ không giữ "nhà xuất bản" còn hoạt động.
Vì vậy không: nếu pClass sắp được thu thập, bạn không cần hủy đăng ký người nghe. Tuy nhiên, nếu pClass tồn tại lâu (dài hơn trường hợp với MyFunction), thì pClass có thể giữ cho cá thể đó còn sống, do đó, sẽ cần thiết để hủy đăng ký nếu bạn muốn mục tiêu được thu thập.
Sự kiện tĩnh, tuy nhiên, vì lý do này, rất nguy hiểm khi được sử dụng với trình xử lý dựa trên cá thể.
Nguồn
2008-11-18 09:43:27
Tôi dự định sẽ gợi ý cho độc giả quan tâm đến câu hỏi này có thể đáng làm quen với các sự kiện nhẹ/mẫu sự kiện yếu, KHÔNG ngăn việc thu gom rác xảy ra. Một khởi động SO tốt cho chủ đề này là http://stackoverflow.com/questions/185931/weakreference-and-event-handling – fostandy
Lưu ý cho hậu thế: đặt tham chiếu thành null chỉ đơn giản là trì hoãn bộ thu gom rác bằng cách kéo dài một dòng phạm vi tham chiếu. .NET không phải là VB6. –