Bird
Raised Fist0
C Sharp (C#)programming~20 mins

Publisher-subscriber execution model in C Sharp (C#) - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Publisher-Subscriber Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this simple publisher-subscriber example?

Consider the following C# code implementing a basic publisher-subscriber pattern. What will be printed when the program runs?

C Sharp (C#)
using System;

public class Publisher
{
    public event Action OnChange;

    public void RaiseEvent()
    {
        OnChange?.Invoke();
    }
}

public class Subscriber
{
    public void Respond()
    {
        Console.WriteLine("Subscriber received event.");
    }
}

public class Program
{
    public static void Main()
    {
        Publisher pub = new Publisher();
        Subscriber sub = new Subscriber();
        pub.OnChange += sub.Respond;
        pub.RaiseEvent();
    }
}
ASubscriber received event.
BNo output
CRuntime error: NullReferenceException
DCompile error: event invocation not allowed
Attempts:
2 left
💡 Hint

Look at how the event is subscribed and invoked.

❓ Predict Output
intermediate
2:00remaining
What happens if no subscriber is attached?

What will be the output or behavior of this code when RaiseEvent is called but no subscriber is attached?

C Sharp (C#)
using System;

public class Publisher
{
    public event Action OnChange;

    public void RaiseEvent()
    {
        OnChange?.Invoke();
        Console.WriteLine("Event raised.");
    }
}

public class Program
{
    public static void Main()
    {
        Publisher pub = new Publisher();
        pub.RaiseEvent();
    }
}
ACompile error: event invocation not allowed
BRuntime error: NullReferenceException
CNo output
DEvent raised.
Attempts:
2 left
💡 Hint

Check the null-conditional operator usage.

🔧 Debug
advanced
2:00remaining
Identify the error in this publisher-subscriber code

What error will this code produce when compiled or run?

C Sharp (C#)
using System;

public class Publisher
{
    public event Action OnChange;

    public void RaiseEvent()
    {
        OnChange();
    }
}

public class Program
{
    public static void Main()
    {
        Publisher pub = new Publisher();
        pub.RaiseEvent();
    }
}
ARuntime error: NullReferenceException
BCompile error: event invocation not allowed
CNo output
DRuntime error: StackOverflowException
Attempts:
2 left
💡 Hint

Consider what happens if the event has no subscribers and is invoked directly.

🧠 Conceptual
advanced
2:00remaining
Which statement about publisher-subscriber events is true?

Choose the correct statement about the publisher-subscriber pattern using C# events.

AAn event can be invoked from outside the class that declares it.
BSubscribers can only attach methods with matching delegate signatures.
CEvents automatically queue messages if subscribers are busy.
DMultiple events cannot share the same delegate type.
Attempts:
2 left
💡 Hint

Think about how delegates and events work in C#.

❓ Predict Output
expert
3:00remaining
What is the output when multiple subscribers are attached?

Given this code with two subscribers attached to the same event, what will be printed?

C Sharp (C#)
using System;

public class Publisher
{
    public event Action OnChange;

    public void RaiseEvent()
    {
        OnChange?.Invoke();
    }
}

public class Program
{
    public static void Main()
    {
        Publisher pub = new Publisher();
        pub.OnChange += () => Console.WriteLine("First subscriber called.");
        pub.OnChange += () => Console.WriteLine("Second subscriber called.");
        pub.RaiseEvent();
    }
}
ANo output
BFirst subscriber called.
C
First subscriber called.
Second subscriber called.
D
Second subscriber called.
First subscriber called.
Attempts:
2 left
💡 Hint

Events invoke subscribers in the order they were added.

Practice

(1/5)
1. In the publisher-subscriber model in C#, what is the main role of the subscriber?
easy
A. To send messages to multiple listeners
B. To register methods that respond to events from the publisher
C. To create new events for the publisher
D. To directly modify the publisher's data

Solution

  1. Step 1: Understand the roles in the model

    The publisher sends messages or events, while the subscriber listens and reacts.
  2. Step 2: Identify subscriber's responsibility

    Subscribers register their methods to handle events raised by the publisher.
  3. Final Answer:

    To register methods that respond to events from the publisher -> Option B
  4. Quick Check:

    Subscriber = method registration [OK]
Hint: Subscribers listen and react by registering methods [OK]
Common Mistakes:
  • Confusing publisher and subscriber roles
  • Thinking subscriber sends messages
  • Assuming subscriber modifies publisher directly
2. Which of the following is the correct syntax to subscribe a method named OnDataReceived to an event DataReceived in C#?
easy
A. DataReceived += OnDataReceived;
B. DataReceived = OnDataReceived();
C. DataReceived -= OnDataReceived;
D. OnDataReceived += DataReceived;

Solution

  1. Step 1: Recall event subscription syntax

    In C#, subscribing to an event uses the += operator with the method name (without parentheses).
  2. Step 2: Match correct syntax

    DataReceived += OnDataReceived; correctly subscribes the method.
  3. Final Answer:

    DataReceived += OnDataReceived; -> Option A
  4. Quick Check:

    Subscribe event = += method [OK]
Hint: Use += to subscribe methods to events [OK]
Common Mistakes:
  • Using = instead of +=
  • Calling method with parentheses when subscribing
  • Confusing subscription with unsubscription (-=)
3. Consider the following C# code snippet:
public class Publisher {
    public event Action Notify;
    public void Raise() {
        Notify?.Invoke();
    }
}

public class Subscriber {
    public void Respond() {
        Console.WriteLine("Event received");
    }
}

var pub = new Publisher();
var sub = new Subscriber();
pub.Notify += sub.Respond;
pub.Raise();

What will be the output when pub.Raise() is called?
medium
A. No output
B. NullReferenceException
C. Event received
D. Compile-time error

Solution

  1. Step 1: Understand event subscription and invocation

    The subscriber's Respond method is subscribed to the Notify event, so it will be called when Raise() invokes Notify.
  2. Step 2: Analyze output of Respond method

    Respond prints "Event received" to the console, so this text will appear.
  3. Final Answer:

    Event received -> Option C
  4. Quick Check:

    Subscribed method runs and prints message [OK]
Hint: Subscribed methods run on event invoke [OK]
Common Mistakes:
  • Forgetting to subscribe the method
  • Expecting no output if event is null
  • Confusing event invocation syntax
4. The following code tries to unsubscribe a method from an event but causes a runtime error:
public class Publisher {
    public event Action Notify;
}

var pub = new Publisher();
pub.Notify -= () => Console.WriteLine("Hello");

What is the main issue causing the error?
medium
A. Lambda expressions cannot be used with events
B. Events cannot be unsubscribed in C#
C. The event Notify is not initialized
D. Cannot unsubscribe a lambda expression that was never subscribed

Solution

  1. Step 1: Understand event unsubscription rules

    In C#, events start as null delegates. Unsubscribing (-=) from a null event throws NullReferenceException.
  2. Step 2: Identify cause of runtime error

    No prior subscription means Notify is null, so pub.Notify -= lambda throws NullReferenceException. The lambda was never subscribed.
  3. Final Answer:

    Cannot unsubscribe a lambda expression that was never subscribed -> Option D
  4. Quick Check:

    Null event -= throws NullRef [OK]
Hint: Unsubscribe only delegates you subscribed before [OK]
Common Mistakes:
  • Assuming unsubscribing any lambda works
  • Thinking events cannot be unsubscribed
  • Confusing null event invocation with unsubscription
5. You want to implement a publisher-subscriber system where multiple subscribers can register to receive messages, but some subscribers should only receive messages if a condition is true (e.g., message contains a keyword). Which approach best applies this conditional filtering in C#?
hard
A. Use event subscription with wrapper methods that check the condition before handling
B. Modify the publisher to send messages only to specific subscribers directly
C. Use multiple events for each condition and subscribe accordingly
D. Use a single event and let subscribers unsubscribe if condition is false

Solution

  1. Step 1: Understand conditional filtering in subscriber model

    The publisher sends events to all subscribers; filtering is best done in subscriber methods.
  2. Step 2: Apply wrapper methods for condition

    Subscribers can register methods that first check the condition and only proceed if true, keeping publisher simple.
  3. Step 3: Evaluate other options

    Modifying publisher to target subscribers breaks decoupling; multiple events add complexity; unsubscribing dynamically is inefficient.
  4. Final Answer:

    Use event subscription with wrapper methods that check the condition before handling -> Option A
  5. Quick Check:

    Filter in subscriber methods for flexibility [OK]
Hint: Filter messages inside subscriber methods [OK]
Common Mistakes:
  • Trying to filter inside publisher breaking decoupling
  • Creating many events for each condition
  • Unsubscribing subscribers dynamically instead of filtering
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard