Scott Wisniewski, a developer on the VB 9 Compiler Team has posted the first five parts of a series of articles on the new extension methods included in Visual Basic 9.0's "Orcas" release.
Series topics are:
- Extension Methods Part 1: An Introduction to Extension Methods
- Extension Methods Part 2: Rules for Consuming Extension Methods
- Extension Methods Part 3: Extension Methods and ByVal/ByRef Parameters
- Extension Methods Part 4: Extension Methods and Late Binding
- Extension Methods Part 5: Generics and Extension Methods
- Extension Methods Part 6: Extension Methods Best Practices
Here's a part of Scott's description of extension methods:
[Extension methods] provide a very powerful and elegant way to inject your own custom functionality into other people's types. In particular, through a great deal of compiler magic, Extension methods enable you to create a method in a module decorated with an attribute and have that method appear as if it was an instance method defined on another type.
Extension Methods and LINQ
Extension methods play a major role in LINQ. According to Don Box and Anders Hejlsberg in "The LINQ Project" (September 2005):
Extension methods combine the flexibility of "duck typing" made popular in dynamic languages with the performance and compile-time validation of statically typed languages. With extension methods third parties may augment the public contract of a type with new methods while still allowing individual type authors to provide their own specialized implementation of those methods.
Extension methods are defined in static classes as static methods, but are marked with the
[System.Runtime.CompilerServices.Extension]attribute in CLR metadata. Languages are encouraged to provide a direct syntax for extension methods. ...
Extension methods are resolved at compile-time based on which extension methods are in scope. When a namespace is imported with C#'s
usingstatement or VB's
Importstatement, all extension methods that are defined by static classes from that namespace are brought into scope.
The standard query operators are defined as extension methods in the type System.Query.Sequence. When examining the standard query operators, you'll notice that all but one of them is defined in terms of the
IEnumerable<T>interface (the exception is
OfType, which is described later). This means that every
IEnumerable<T>-compatible information source gets the standard query operators simply by adding the using System.Query statement in C# [or Imports System.Query in VB].
Most extension method examples are written in C#. A serious exposition of VB's forthcoming extension methods is most welcome.
As usual, I'll update this post as Scott adds parts to his series.