Extension methods are a simple way to extend existing classes without having to create a new class. They help make your code more readable because, instread of writing code like this:
Extensions.Print( Enumerable.Where(Process.GetProcesses, Function(X As Process) X.MainWindowTitle.Length > 0), Function(X As Process) X.MainWindowTitle)
You can write it like this:
Process.GetProcesses.Where(Function(X) X.MainWindowTitle.Length > 0).Print(Function(X) X.MainWindowTitle)
VB 2008 already has several extension methods like Where, Select, OrderBy, ToArray and more. They are methods that have an arrow pointing down in the function list.
To make an extension method, what you need to do is write a function in a module, make the first argument what you want it to extend and add the extension attribute to it. Here is an example:
The Print extension method extends all IEnumberable(Of T) items, like arrays or anything you can use for a For Each loop.
A good use for extension methods is for making parsing string easier. Here is one that will find all matches in a string:
You could use it for parsing out all RS worlds if you wanted to:
If you want more detailed information about extension methods, check this link http://msdn.microsoft.com/en-us/magazine/cc163317.aspx.
Extensions.Print( Enumerable.Where(Process.GetProcesses, Function(X As Process) X.MainWindowTitle.Length > 0), Function(X As Process) X.MainWindowTitle)
You can write it like this:
Process.GetProcesses.Where(Function(X) X.MainWindowTitle.Length > 0).Print(Function(X) X.MainWindowTitle)
VB 2008 already has several extension methods like Where, Select, OrderBy, ToArray and more. They are methods that have an arrow pointing down in the function list.
To make an extension method, what you need to do is write a function in a module, make the first argument what you want it to extend and add the extension attribute to it. Here is an example:
Code:
Imports Extension = System.Runtime.CompilerServices.ExtensionAttribute
Public Module Extensions
<Extension()> _
Public Sub Print(Of T)(ByVal Source As IEnumerable(Of T), Optional ByVal Selector As Func(Of T, Object) = Nothing)
If Source Is Nothing Then Throw New ArgumentNullException("Source")
If Selector Is Nothing Then Selector = Function(X) X
For Each Item In Source
Console.WriteLine(Selector(Item))
Next
End Sub
End Module
A good use for extension methods is for making parsing string easier. Here is one that will find all matches in a string:
Code:
<Extension()> _
Public Function ParseString(ByVal Source As String, ByVal Pattern As String, _
Optional ByVal Options As System.Text.RegularExpressions.RegexOptions = _
System.Text.RegularExpressions.RegexOptions.None) _
As IEnumerable(Of System.Text.RegularExpressions.Match)
Return System.Text.RegularExpressions.Regex.Matches(Source, Pattern, Options) _
.OfType(Of System.Text.RegularExpressions.Match)()
End Function
Code:
Dim Html = New System.Net.WebClient().DownloadString("http://www.runescape.com/slj.ws?order=WPAML")
Dim Matches = Html.ParseString("e\((\d+),\d,\d+,""[a-zA-Z1-9\-\s]+"",\w+,""\w+"",(\d+),\d+\);")
Matches.Print(Function(X) String.Format("World {0} has {1} players.", X.Groups(1).Value, X.Groups(2).Value))



