Extension Methods (C# 3.0)

Extension methods allow an existing type to be extended with new methods, without altering the definition of the original type. An extension method is a static method of a static class, where the this modifier is applied to the first parameter. The type of the first parameter will be the type that is extended. For example:

	public static class StringHelper
	{
	  public static bool IsCapitalized (this string s)
	  {
	    if (string.IsNullOrEmpty (s)) return false;
	    return char.IsUpper (s[0]);
	  }
	}

The IsCapitalized extension method can be called as though it were an instance method on a string, as follows:

	Console.Write ("Perth".IsCapitalized());

An extension method call, when compiled, is translated back into an ordinary static method call:

	Console.Write (StringHelper.IsCapitalized ("Perth"));

Interfaces can be extended, too:

	public static T First<T> (this IEnumerable<T> sequence)
	{
	  foreach (T element in sequence)
	    return element;
	  throw new InvalidOperationException ("No elements!");
	}
	...
	Console.WriteLine ("Seattle".First());   // S

Extension Method Chaining

Extension methods, like instance methods, provide a tidy way to chain functions. Consider the following two functions:

	public static class StringHelper
	{
	  public static string Pluralize (this string s) {...}
	  public static string Capitalize (this string s) {...}
	}

x and y are equivalent and both evaluate to "Sausages", but x uses extension methods, whereas y uses static methods:

 string x = "sausage".Pluralize( ).Capitalize( ...

Get C# 3.0 Pocket Reference, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.