🔌 Extension Methods = Add Functionality
Can’t modify existing types? Extension methods add functionality. Use like instance methods.
❌ Static Methods
string email = "USER@EXAMPLE.com"; email = StringHelper.ToTitleCase(email);
✅ Extension Method
string email = "USER@EXAMPLE.com"; email = email.ToTitleCase();
📝 Extension Examples
// Static class, static methods
public static class StringExtensions
{
public static string ToTitleCase(this string input)
{
if (string.IsNullOrEmpty(input)) return input;
return char.ToUpper(input[0]) + input.Substring(1).ToLower();
}
public static bool IsValidEmail(this string email)
{
try {
var addr = new System.Net.Mail.MailAddress(email);
return addr.Address == email;
} catch {
return false;
}
}
public static string Truncate(this string value, int maxLength)
{
return value?.Length > maxLength ? value.Substring(0, maxLength) + "..." : value;
}
}
// Usage
string name = "john doe";
name = name.ToTitleCase(); // "John Doe"
string email = "user@example.com";
bool valid = email.IsValidEmail(); // true
// DateTime extensions
public static class DateTimeExtensions
{
public static bool IsWeekend(this DateTime date)
{
return date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday;
}
public static DateTime StartOfWeek(this DateTime date)
{
var diff = (7 + (date.DayOfWeek - DayOfWeek.Monday)) % 7;
return date.AddDays(-diff).Date;
}
}
// IEnumerable extensions
public static class EnumerableExtensions
{
public static IEnumerable ForEach(this IEnumerable source, Action action)
{
foreach (var item in source)
{
action(item);
yield return item;
}
}
}
// Extension Method Tips
- Put in dedicated namespace
- Use meaningful method names
- Keep extensions focused
- Don't override existing methods
- Use with LINQ for readability
💡 Extension Tips
- Put in dedicated namespace
- Use meaningful method names
- Keep extensions focused
- Don’t override existing methods
- Use with LINQ for readability
“Extension methods add functionality to existing types. Clean, reusable, intuitive. Essential for C# development.”
