Extension methods let you add new actions to existing types like strings or numbers without changing their original code.
Extension methods for built-in types in C Sharp (C#)
public static class ClassName { public static ReturnType MethodName(this Type parameter, other parameters...) { // method body } }
The this keyword before the first parameter tells C# this is an extension method.
Extension methods must be inside a static class and be static themselves.
IsAllLetters method to strings to check if all characters are letters.public static class StringExtensions { public static bool IsAllLetters(this string str) { foreach (char c in str) if (!char.IsLetter(c)) return false; return true; } }
IsEven method to integers to check if a number is even.public static class IntExtensions { public static bool IsEven(this int number) { return number % 2 == 0; } }
This program adds a new method to strings to check if they contain only letters. It then tests two words and prints the results.
using System; public static class StringExtensions { public static bool IsAllLetters(this string str) { foreach (char c in str) if (!char.IsLetter(c)) return false; return true; } } public class Program { public static void Main() { string word1 = "Hello"; string word2 = "Hello123"; Console.WriteLine($"{word1} is all letters: {word1.IsAllLetters()}"); Console.WriteLine($"{word2} is all letters: {word2.IsAllLetters()}"); } }
Extension methods look like normal methods when you use them, but they are static methods behind the scenes.
You can add extension methods to any type, including built-in types like string and int.
Extension methods cannot access private members of the type they extend.
Extension methods add new actions to existing types without changing them.
They must be static methods inside static classes, with this before the first parameter.
They help keep code clean and let you add useful features to built-in types.
Practice
Solution
Step 1: Understand extension method purpose
Extension methods allow adding new functionality to existing types without changing their original code.Step 2: Compare options
Replacing built-in types with custom implementations, creating a new class that inherits from a built-in type, or overriding existing methods are different concepts from extension methods.Final Answer:
To add new methods to existing types without modifying their source code -> Option AQuick Check:
Extension methods add new actions without changing original types [OK]
- Confusing extension methods with inheritance
- Thinking extension methods override existing methods
- Believing extension methods replace built-in types
string type?Solution
Step 1: Recall extension method syntax
Extension methods must be static methods inside static classes, withthisbefore the first parameter type.Step 2: Check options
Only public static void MyMethod(this string str) { } usesthis string strcorrectly. The other options miss thethiskeyword or static modifier.Final Answer:
public static void MyMethod(this string str) { } -> Option BQuick Check:
Extension method syntax requires 'this' before first parameter [OK]
- Omitting the 'this' keyword before the first parameter
- Not making the method static
- Placing 'this' after the parameter name
public static class StringExtensions {
public static bool IsCapitalized(this string s) {
return !string.IsNullOrEmpty(s) && char.IsUpper(s[0]);
}
}
class Program {
static void Main() {
string word = "Hello";
Console.WriteLine(word.IsCapitalized());
}
}Solution
Step 1: Understand the extension method logic
The method checks if the string is not null or empty and if the first character is uppercase.Step 2: Analyze the input string
The string "Hello" starts with 'H', which is uppercase, so the method returns true.Final Answer:
True -> Option AQuick Check:
First letter uppercase in "Hello" means IsCapitalized() returns True [OK]
- Assuming method returns false for capitalized words
- Confusing null or empty check logic
- Expecting compilation error due to extension method
public static class IntExtensions {
public static bool IsEven(int number) {
return number % 2 == 0;
}
}Solution
Step 1: Check extension method requirements
Extension methods must be static and the first parameter must have the 'this' keyword to specify the type being extended.Step 2: Identify missing 'this' keyword
The method parameter 'int number' lacks 'this', so it is not a valid extension method.Final Answer:
The method must be static and have 'this' before the first parameter -> Option CQuick Check:
Extension methods require 'this' keyword on first parameter [OK]
- Forgetting 'this' before the first parameter
- Placing method in non-static class
- Using instance methods instead of static
List<int> that returns the sum of all even numbers in the list. Which of the following implementations correctly achieves this?Solution
Step 1: Verify extension method signature
public static int SumEven(this List<int> list) { int sum = 0; foreach(var n in list) { if(n % 2 == 0) sum += n; } return sum; } and the version using list.Sum(n => n % 2) have 'this List<int> list' parameter, making them extension methods. The others lack 'this'.Step 2: Check logic correctness
public static int SumEven(this List<int> list) { int sum = 0; foreach(var n in list) { if(n % 2 == 0) sum += n; } return sum; } sums even numbers correctly using a loop and condition. public static int SumEven(this List<int> list) { return list.Sum(n => n % 2); } sums n % 2 which returns 0 or 1, not the number itself. The others are not extension methods.Final Answer:
public static int SumEven(this List<int> list) { int sum = 0; foreach(var n in list) { if(n % 2 == 0) sum += n; } return sum; } -> Option DQuick Check:
Extension method with correct sum logic is public static int SumEven(this List<int> list) { int sum = 0; foreach(var n in list) { if(n % 2 == 0) sum += n; } return sum; } [OK]
- Missing 'this' keyword for extension method
- Incorrect lambda in Sum causing wrong results
- Not filtering even numbers before summing
Ready to prove it?
Pass the test and this pattern moves unknown
