Hi,
The equivalent of Static in VB in Shared. Shared methods are usually put in Helper classes because they do not require an instance of the class to run.
The type T is indicates that this is a generic method (this is a new feature in VB9 and C# 3). A generic method effectively takes a type as an argument or returns a generic type.
Extension methods are also new in VB9/c#3, these allow you to extend an existing type by adding methods. All you need is a Shared method which is available in the same namespace as your code, in VB the code has to be in a module, not a normal class. A module is a class that can't be instantiated and (therefore) only has shared methods. It is declared with the Module keyword in place of the class keyword. Here is your code in VB.
(Also for those that know what's going on "under the covers" strangely setting a value type to nothing does compile in VB and is the supported way to get the default value of a value type).
Imports System.Runtime.CompilerServices
<Extension()> _
Public Shared Function GetValueOrDefault(Of T)(ByVal reader As IDataReader, ByVal columnName As String) As T
Dim returnValue As T = Nothing
End Function