Unsubscribing from events helps stop unwanted actions and frees memory. It keeps your program clean and fast.
Event unsubscription and memory in C Sharp (C#)
eventSource.EventName -= EventHandlerMethod;
Use the same method you used to subscribe, but with '-=' to unsubscribe.
Unsubscribing is important especially in applications with many events or long lifetimes.
OnSomeEvent from the SomeEvent event.publisher.SomeEvent -= OnSomeEvent;
Button_Click method from running when the button is clicked.button.Click -= Button_Click;
This program shows a publisher sending an event and a subscriber listening. After unsubscribing, the subscriber no longer reacts, which helps avoid memory leaks and unwanted calls.
using System; class Publisher { public event EventHandler? RaiseEvent; public void DoSomething() { Console.WriteLine("Doing something..."); RaiseEvent?.Invoke(this, EventArgs.Empty); } } class Subscriber { public void Subscribe(Publisher pub) { pub.RaiseEvent += HandleEvent; } public void Unsubscribe(Publisher pub) { pub.RaiseEvent -= HandleEvent; } private void HandleEvent(object? sender, EventArgs e) { Console.WriteLine("Event received in subscriber."); } } class Program { static void Main() { Publisher pub = new Publisher(); Subscriber sub = new Subscriber(); sub.Subscribe(pub); pub.DoSomething(); // Event fires, subscriber reacts sub.Unsubscribe(pub); pub.DoSomething(); // Event fires, but subscriber does not react } }
Always unsubscribe from events when the subscriber is no longer needed.
Failing to unsubscribe can cause memory leaks because the publisher keeps a reference to the subscriber.
Use weak event patterns or tools if manual unsubscription is difficult.
Unsubscribing stops event notifications and frees memory.
Use '-=' with the same method to unsubscribe from an event.
Always unsubscribe to avoid memory leaks and unexpected behavior.
Practice
Solution
Step 1: Understand event subscription behavior
When an object subscribes to an event, the event publisher holds a reference to the subscriber's method.Step 2: Effect of not unsubscribing
If you don't unsubscribe, the subscriber object remains referenced and cannot be garbage collected, causing a memory leak.Final Answer:
The subscriber object may not be garbage collected, causing a memory leak. -> Option CQuick Check:
Not unsubscribing = memory leak [OK]
- Assuming events auto-unsubscribe
- Thinking unsubscribing causes errors
- Believing event handlers run only once
OnDataReceived from an event DataReceived?Solution
Step 1: Recall event unsubscription syntax
In C#, to unsubscribe from an event, use the '-=' operator with the same method.Step 2: Match correct syntax
DataReceived -= OnDataReceived; uses 'DataReceived -= OnDataReceived;', which is the correct way to unsubscribe.Final Answer:
DataReceived -= OnDataReceived; -> Option AQuick Check:
Unsubscribe syntax = '-=' operator [OK]
- Using '+=' instead of '-=' to unsubscribe
- Trying to assign null to the event
- Using non-existent Unsubscribe method
using System;
class Program {
static event Action MyEvent;
static void Handler() => Console.WriteLine("Called");
static void Main() {
MyEvent += Handler;
MyEvent -= Handler;
MyEvent?.Invoke();
}
}Solution
Step 1: Analyze event subscription and unsubscription
The method Handler is subscribed then immediately unsubscribed from MyEvent.Step 2: Check event invocation
Since no handlers remain, MyEvent is null, so MyEvent?.Invoke() does nothing and prints no output.Final Answer:
No output -> Option BQuick Check:
Unsubscribed event = no call [OK]
- Expecting output despite unsubscription
- Ignoring null conditional operator
- Thinking event throws exception if empty
class Publisher {
public event Action OnChange;
public void Raise() => OnChange?.Invoke();
}
class Subscriber {
public void Subscribe(Publisher p) {
p.OnChange += HandleChange;
}
void HandleChange() {
Console.WriteLine("Changed");
}
}Solution
Step 1: Review subscription and unsubscription
The Subscriber subscribes to the event but never unsubscribes.Step 2: Understand consequences
Without unsubscription, the Subscriber object remains referenced by Publisher, causing memory leaks.Final Answer:
Subscriber never unsubscribes, causing potential memory leaks. -> Option AQuick Check:
Missing unsubscribe = memory leak risk [OK]
- Ignoring unsubscription importance
- Confusing static and instance events
- Assuming null conditional operator causes errors
Solution
Step 1: Understand static event references
Static events hold references for the app lifetime, so subscribers never get garbage collected unless unsubscribed.Step 2: Best practice to avoid leaks
Using weak event patterns or explicitly unsubscribing prevents memory leaks by releasing subscriber references.Final Answer:
Use weak event patterns or explicitly unsubscribe when subscribers are no longer needed. -> Option DQuick Check:
Weak events or unsubscribe = prevent leaks [OK]
- Assuming GC cleans static event subscribers
- Changing event to instance-level without reason
- Replacing events with inefficient polling
Ready to prove it?
Pass the test and this pattern moves unknown
