Introduction
Delegates let you pass methods as parameters so you can call them later. This helps you run different code when something happens, like a callback.
delegate ReturnType DelegateName(ParameterList); // Example: delegate void Callback(string message);
delegate void SimpleCallback(); void Run(SimpleCallback callback) { callback(); } Run(() => Console.WriteLine("Hello!"));
delegate void MessageCallback(string msg); void ShowMessage(MessageCallback callback) { callback("Hi there!"); } ShowMessage(msg => Console.WriteLine(msg));
using System; class Program { // Define a delegate type that takes a string and returns void delegate void Notify(string message); // Method that accepts a delegate as a callback static void ProcessData(Notify callback) { Console.WriteLine("Processing data..."); // After processing, call the callback callback("Data processed successfully."); } static void Main() { // Call ProcessData and pass a method as callback ProcessData(PrintNotification); // Or use a lambda expression as callback ProcessData(msg => Console.WriteLine($"Lambda says: {msg}")); } static void PrintNotification(string message) { Console.WriteLine("Notification: " + message); } }
delegate void Callback(string message);
class Program {
static void Main() {
Callback cb = msg => Console.WriteLine($"Hello, {msg}!");
RunProcess(cb);
}
static void RunProcess(Callback callback) {
Console.WriteLine("Starting process...");
callback("World");
Console.WriteLine("Process finished.");
}
}delegate void Notify();
class Test {
static void Main() {
Notify n = NotifyMethod;
Run(n);
}
static void Run(Notify callback) {
callback();
}
static void NotifyMethod(string message) {
Console.WriteLine(message);
}
}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?Action<int> fits as it takes int and returns void.Task.Run(() => callback(item)) runs the callback asynchronously for each element.Action<int> and call it inside a loop with Task.Run(() => callback(item)) -> Option APass the test and this pattern moves unknown