12.4. Extension Methods

A design question that often arises is whether to extend a given interface to include a specific method. Extending any widely used interface, for example IEnumerable, will not only break contracts where the interface has been implemented but will also force any future class that implements the interface to include the new method. Although there are scenarios where this is warranted, there are also numerous cases in which you simply want to create a method to manipulate an object that matches a particular interface.

One possible example involves a Count method that simply iterates through an IEnumerable and returns the number of elements. Adding this method to the IEnumerable interface would actually increase the amount of redundant code, as each class implementing the interface would have to implement the Count method. A solution to this problem is to create a helper class that has a static Count method that accepts an IEnumerable parameter.

Public Shared Function Count(ByVal items As IEnumerable) As Integer
    Dim i As Integer = 0
    For Each x In items
        i += 1
    Next
    Return i
End Function

Dim cnt = Count(people)

While this solution is adequate in most scenarios, it can lead to some terse-looking code when you use multiple static methods to manipulate a given object. Extension methods promote readability by enabling you to declare static methods that appear to modify the public type information for a class or interface. For example, in the case of the IEnumerable ...

Get Professional Visual Studio® 2008 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.