Extension methods illustrated
Extension methods are a great new feature in the .NET Framework 3.5 that let you write new methods that appear to be part of existing classes without the need to subclass or modify them.
We can explain this in simple terms with an example. Here is a useful routine that takes a string and returns what it finds between two other strings that works just fine with .NET 2.0 and .NET 1.1.
public static string Between(string value, string start, string end) {
int startIndex = value.IndexOf(start, StringComparison.CurrentCultureIgnoreCase);
if (startIndex == -1)
return "";
startIndex += start.Length;
int endIndex = value.IndexOf(end, startIndex, StringComparison.CurrentCultureIgnoreCase);
if (endIndex == -1)
return "";
return value.Substring(startIndex, endIndex-startIndex);
}
If this method belonged to a static StringUtilities class then you could use it like this:
string newString = StringUtilities.Between(inputString, startingString, endingString);
The problem is knowing that the StringUtilities class within the project you are working on and until you know that IntelliSense can’t even kick in. What would be nice is to add this to the String class but of course we can’t because String is sealed and besides methods everywhere create String classes and not instances of your subclass.
What would be really cool is if Visual Studio and .NET could just realize that this method is static and takes a string parameter as it’s first parameter and let it just appear as another method on the String class and just call StringUtilities behind the scenes.
That is exactly what the extension methods in .NET 3.5 achieve.
All we need to do is put this in front of the first parameter which will let VS and the compiler know that this method should appear as if it is a method against the type of that first parameter. The method must be static and visible to the code and curiously the class itself must also be static. Our signature now appears as:
public static string Between(string <em>this</em> value, string start, string end)
To call the method we simply press . after our string and IntelliSense displays all the usual methods and properties of the String class and any extension methods it can find in your project too which now includes our Between method giving us:
string newString = inputString.Between(startingString, endingString);
Nice but bear in mind the extension method can only access the public parts of the class it will appear with – there is no privileged access to protected properties or methods that would be available with sub-classing!
[)amien
6 responses