.Los compiladores pueden tomar cualquier tipo de sintaxis de lenguaje y convertirlo en un equivalente .NET. A veces hay una correspondencia uno a uno otras veces no es así.
Al usar .NET Reflector puede ver lo que el compilador realmente está haciendo.
En VB.NET existe el módulo debido a la herencia heredada de Visual BASIC y en parte de Microsoft BASIC.
El VB.compilador NET tomar este
Public Module CoreModule
Dim R As New System.Random(CInt(Microsoft.VisualBasic.Timer))
Public Function D(ByVal Roll As Integer) As Integer
Return R.Next(0, Roll) + 1
End Function
Public Function _1D6() As Integer
Return D(6)
End Function
Public Function _2D6() As Integer
Return D(6) + D(6)
End Function
Public Function _3D6() As Integer
Return D(6) + D(6) + D(6)
End Function
Public Function _4D6() As Integer
Return D(6) + D(6) + D(6) + D(6)
End Function
Public Function CRLF() As String
Return Microsoft.VisualBasic.ControlChars.CrLf
End Function
End Module
y convertirlo en esto (código dejado de lado por razones de brevedad)
Public NotInheritable Class CoreModule
' Methods
Shared Sub New()
Public Shared Function _1D6() As Integer
Public Shared Function _2D6() As Integer
Public Shared Function _3D6() As Integer
Public Shared Function _4D6() As Integer
Public Shared Function CRLF() As String
Public Shared Function D(ByVal Roll As Integer) As Integer
' Fields
Private Shared R As Random
End Class
En C# es el equivalente de este
public sealed class CoreModule
{
// Fields
private static Random R;
// Methods
static CoreModule();
public static int _1D6();
public static int _2D6();
public static int _3D6();
public static int _4D6();
public static string CRLF();
public static int D(int Roll);
}
Todo lo que importa es que el emitido CIL hace el trabajo correctamente.
Esta capacidad es la razón principal por la que tantos programadores antiguos de Visual Basic 6 están muy molestos por los cambios de MS en el lenguaje. Por ejemplo, la palabra clave Integer emite un Int32 en lugar de un Int16.
Los módulos están expuestos a otros ensambles que hacen referencia al ensamblaje original, siempre que el módulo se declare público.
Creo que malinterpreta las capacidades de VB.Net. Los módulos no son clases compartidas/estáticas, son globales para los métodos del espacio de nombres que se pueden usar en cualquier lugar. Por lo general, son de tipo abstracto, no extensiones. Funciones, Subs e incluso Extensiones todas viven fuera de la burbuja OOP, descrita por @ Konrad-Rudolph – GoldBishop
Otro punto, para futuros espectadores ... Los nombres de los Módulos no deben tener el mismo nombre entre las Bibliotecas. Los nombres deben ser únicos en el nombre entre los usos. – GoldBishop