📖 Scenario: You are building a simple notification system where a process can notify different actions when it finishes.
🎯 Goal: Create a delegate to act as a callback, assign methods to it, and invoke it to notify when a process is done.
📋 What You'll Learn
Create a delegate type called ProcessCompleted that takes no parameters and returns void
Create a method called NotifyUser that prints "Process completed!"
Create a method called LogCompletion that prints "Logging: Process finished."
Create a delegate variable called callback and assign NotifyUser to it
Add LogCompletion to the callback delegate invocation list
Invoke the callback delegate to run all assigned methods
💡 Why This Matters
🌍 Real World
Delegates are used to implement callbacks, event handling, and flexible method calls in many C# applications like UI programming and asynchronous operations.
💼 Career
Understanding delegates is essential for C# developers to write modular, reusable, and event-driven code in professional software development.
Progress0 / 4 steps
1
Create the delegate type and methods
Create a delegate type called ProcessCompleted that takes no parameters and returns void. Then create two methods: NotifyUser that prints "Process completed!" and LogCompletion that prints "Logging: Process finished."
C Sharp (C#)
Hint
Use public delegate void ProcessCompleted() to declare the delegate. Define two static methods with Console.WriteLine inside.
2
Create the delegate variable and assign the first method
Inside Main, create a variable called callback of type ProcessCompleted and assign it to the method NotifyUser.
C Sharp (C#)
Hint
Use ProcessCompleted callback = NotifyUser; to assign the method to the delegate variable.
3
Add the second method to the delegate
Add the method LogCompletion to the callback delegate invocation list using the += operator.
C Sharp (C#)
Hint
Use callback += LogCompletion; to add the method to the delegate.
4
Invoke the delegate to run all methods
Invoke the callback delegate to run all assigned methods.
C Sharp (C#)
Hint
Call the delegate like a method: callback();
Practice
(1/5)
1. What is the main purpose of using delegates as a callback pattern in C#?
easy
A. To handle exceptions automatically
B. To create new classes dynamically
C. To pass methods as parameters and execute them later
D. To convert data types implicitly
Solution
Step 1: Understand delegate usage
Delegates allow methods to be passed as parameters to other methods.
Step 2: Identify callback purpose
This passing enables callbacks, which run code after some work is done.
Final Answer:
To pass methods as parameters and execute them later -> Option C
Quick Check:
Delegates = method parameters for callbacks [OK]
Hint: Delegates let you pass methods to run later [OK]
Common Mistakes:
Confusing delegates with classes
Thinking delegates handle exceptions
Assuming delegates convert data types
2. Which of the following is the correct syntax to declare a delegate that takes an int and returns void?
easy
A. MyDelegate delegate void(int number);
B. void delegate MyDelegate(int number);
C. delegate MyDelegate void(int number);
D. delegate void MyDelegate(int number);
Solution
Step 1: Recall delegate declaration syntax
The correct syntax is: delegate returnType DelegateName(parameterList);
A. Starting process...
Hello, World!
Process finished.
B. Hello, World!
Starting process...
Process finished.
C. Starting process...
Process finished.
Hello, World!
D. Process finished.
Starting process...
Hello, World!
Solution
Step 1: Trace method calls in Main and RunProcess
Main creates a callback that prints "Hello, {msg}!" and passes it to RunProcess. RunProcess prints "Starting process...", calls callback with "World", then prints "Process finished.".
Step 2: Determine output order
Output lines are: "Starting process...", "Hello, World!", "Process finished." in that order.
Final Answer:
Starting process...
Hello, World!
Process finished. -> Option A
Quick Check:
Callback runs between start and finish prints [OK]
Hint: Callbacks run where invoked inside method [OK]
Common Mistakes:
Assuming callback runs before 'Starting process...'
Mixing output order
Ignoring lambda execution timing
4. Identify the error in this code snippet using delegates as callbacks:
B. Delegate signature does not match method signature
C. Callback method is not called
D. Missing return statement in NotifyMethod
Solution
Step 1: Compare delegate and method signatures
Delegate Notify expects a method with no parameters and void return. NotifyMethod takes a string parameter, so signatures differ.
Step 2: Understand delegate assignment rules
Assigning NotifyMethod to Notify delegate causes a compile-time error due to signature mismatch.
Final Answer:
Delegate signature does not match method signature -> Option B
Quick Check:
Delegate and method signatures must match [OK]
Hint: Delegate and method signatures must match exactly [OK]
Common Mistakes:
Ignoring parameter mismatch
Thinking delegate instantiation is wrong
Assuming missing return causes error here
5. You want to create a method ProcessData that takes an integer array and a delegate callback to process each element asynchronously. Which approach correctly uses delegates as callbacks to print each element after processing?
hard
A. Define a delegate Action<int> and call it inside a loop with Task.Run(() => callback(item))
B. Use a delegate with no parameters and call it once after processing all elements
C. Pass a delegate that returns int and ignore its return value
D. Use a delegate that takes a string but pass integers directly
Solution
Step 1: Identify delegate type for element processing
Since each element is an int and we want to process it, Action<int> fits as it takes int and returns void.
Step 2: Use asynchronous calls inside loop
Calling Task.Run(() => callback(item)) runs the callback asynchronously for each element.
Final Answer:
Define a delegate Action<int> and call it inside a loop with Task.Run(() => callback(item)) -> Option A
Quick Check:
Delegate matches parameter and async call runs callback per item [OK]
Hint: Use Action<int> and async calls inside loop [OK]
Common Mistakes:
Using delegate with wrong parameters
Calling callback only once instead of per item
Ignoring async execution
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.