Extension methods are methods (Sub or Function) that add functionality to a Type (which may be a Reference Type or a Value Type). These Types may or may not be owned by you.
They may or may not be in the same assembly as the Type they are intended to modify. You can allow an opt-in to your extension methods by isolating them in their own namespace. Or if you prefer you can make them always available by including them in the same namespace as the Type they modify (assuming all the assembly references are in place and correct). See the Entity Framework Core 1.0 project on GitHub for a good example of the opt-in style of extension methods.
Extension methods in VB have a few requirements:
Extension methods may only be declared in modules.
Extension methods must be decorated with the Extension() attribute.
The ExtensionAttribute namespace must be available within your module. Imports System.Runtime.CompilerServices
The first parameter to the method must be of a type that this method will be attached to.
The first parameter of the method will represent the instance that this method operates on. (Equivalent to Me if this were a real instance method).
An extension method can be called as a regular method by supplying all parameters if not called on the instantiated object.
Creating an extension method
Extension methods are useful to extend the behaviour of libraries we don't own.
They are used similar to instance methods thanks to the compiler's syntactic sugar:
To have a usable extension method, the method needs the Extension attribute and needs to be declared in a Module.
Getting Assembly Version From Strong Name
Example of calling an extension method as an extension and as a regular method.
The Extension Method in a Module. Make the Module Public if extensions are compiled to a dll and will be referenced in another assembly.
Making the language more functional with extension methods
A good use of extension method is to make the language more functional
This modified text is an extract of the original Stack Overflow Documentation created by following contributors and released under CC BY-SA 3.0