📖 Scenario: You are creating a simple program to greet people using different greeting styles. You will use a delegate to hold references to greeting methods.
🎯 Goal: Build a program that declares a delegate, creates a delegate instance pointing to a greeting method, and calls it to display a greeting message.
📋 What You'll Learn
Declare a delegate type named GreetDelegate that takes a string parameter and returns void.
Create a method named SayHello that takes a string parameter and prints a greeting message.
Instantiate a GreetDelegate delegate named greet pointing to the SayHello method.
Invoke the greet delegate with the name "Alice".
Print the greeting message to the console.
💡 Why This Matters
🌍 Real World
Delegates are used in event handling, callbacks, and designing flexible APIs where methods can be passed around as variables.
💼 Career
Understanding delegates is essential for C# developers working with GUI applications, asynchronous programming, and frameworks like .NET.
Progress0 / 4 steps
1
Declare the delegate type
Declare a delegate named GreetDelegate that takes a string parameter and returns void.
C Sharp (C#)
Hint
A delegate declaration starts with the keyword delegate, followed by the return type, delegate name, and parameter list.
2
Create the greeting method
Create a method named SayHello that takes a string parameter called name and prints "Hello, {name}!" to the console.
C Sharp (C#)
Hint
Use System.Console.WriteLine with an interpolated string to print the greeting.
3
Instantiate the delegate
Inside the Program class, create a GreetDelegate variable named greet and assign it to the SayHello method.
C Sharp (C#)
Hint
Assign the method name SayHello directly to the delegate variable.
4
Call the delegate and print the greeting
In the Main method, call the greet delegate with the argument "Alice" to print the greeting message.
C Sharp (C#)
Hint
Invoke the delegate like a method with the string argument.
Practice
(1/5)
1. What is a delegate in C# used for?
easy
A. To define variables that cannot change
B. To hold references to methods with a specific signature
C. To store values like integers or strings
D. To create new classes dynamically
Solution
Step 1: Understand delegate purpose
A delegate is a type that holds references to methods with a matching signature.
Step 2: Compare options to definition
Only To hold references to methods with a specific signature correctly describes this purpose; others describe unrelated concepts.
Final Answer:
To hold references to methods with a specific signature -> Option B
Quick Check:
Delegate = method reference holder [OK]
Hint: Delegates point to methods, not data or classes [OK]
Common Mistakes:
Confusing delegates with variables
Thinking delegates create classes
Assuming delegates store simple values
2. Which of the following is the correct way to declare a delegate that takes an int and returns void?
easy
A. void delegate MyDelegate(int number);
B. delegate int MyDelegate(void 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);
Step 2: Match syntax to options
delegate void MyDelegate(int number); matches this exactly: delegate void MyDelegate(int number); others have incorrect order or types.
Hint: Remember: 'delegate' keyword + return type + name + parameters [OK]
Common Mistakes:
Placing 'void' before 'delegate'
Swapping delegate name and return type
Using 'void' as parameter type
3. What will be the output of the following code?
delegate int Operation(int x, int y); class Program { static int Add(int a, int b) => a + b; static void Main() { Operation op = Add; Console.WriteLine(op(3, 4)); } }
medium
A. 0
B. 34
C. 7
D. Compile error
Solution
Step 1: Understand delegate assignment
The delegate 'Operation' matches the method 'Add' signature (two ints, returns int), so 'op' points to 'Add'.
Hint: Delegate calls assigned method with given arguments [OK]
Common Mistakes:
Thinking delegate concatenates numbers
Expecting string output
Assuming compile error due to delegate
4. Identify the error in the following delegate instantiation:
delegate void Printer(string message); class Program { static void PrintMessage() { Console.WriteLine("Hello"); } static void Main() { Printer p = PrintMessage; p("Hi"); } }
medium
A. PrintMessage method signature does not match delegate
B. Delegate cannot be assigned to a method
C. Missing parentheses when assigning delegate
D. Delegate must return a value
Solution
Step 1: Compare delegate and method signatures
The delegate 'Printer' expects a method with a string parameter and void return type.
Step 2: Check method signature
'PrintMessage' has no parameters, so it does not match the delegate signature.
Final Answer:
PrintMessage method signature does not match delegate -> Option A
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 needs parentheses on assignment
Assuming delegate must return a value
5. Given the delegate declaration:
delegate bool Filter(int value);
Which of the following correctly instantiates the delegate to a method that returns true if the number is even?
hard
A. Filter f = x => x % 2 == 0;
B. Filter f = (int x) => { return x * 2; };
C. Filter f = delegate(int x) { Console.WriteLine(x); };
D. Filter f = x => x + 2 == 0;
Solution
Step 1: Understand delegate signature
'Filter' expects a method taking an int and returning a bool.
Step 2: Check each option's return type and logic
Filter f = x => x % 2 == 0; returns true if x is even (x % 2 == 0), matching bool return. Filter f = (int x) => { return x * 2; }; returns int, not bool. Filter f = delegate(int x) { Console.WriteLine(x); }; returns void (no return), invalid. Filter f = x => x + 2 == 0; returns bool but checks x + 2 == 0, which is not the even check.
Final Answer:
Filter f = x => x % 2 == 0; -> Option A
Quick Check:
Delegate needs bool return matching even check [OK]
Hint: Match delegate return type and logic exactly [OK]
Common Mistakes:
Returning wrong type (int instead of bool)
Missing return statement in anonymous method
Incorrect condition for even check
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.