.NET-Compiler können jede Art von Sprachsyntax verwenden und in ein .NET-Äquivalent umwandeln. Manchmal gibt es eine Eins-zu-eins-Korrespondenz, andere Zeiten gibt es nicht.
Mit der .NET Reflector können Sie sehen, was der Compiler wirklich macht.
In VB.NET existiert das Modul wegen des geerbten Erbes von Visual BASIC und teilweise von Microsoft BASIC.
Die VB.NET-Compiler wird diesen
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
und es in diesem (Code der Kürze halber weggelassen)
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
In C# entspricht dies
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);
}
, dass alle Materie, dass das ist emittiert CIL macht den Job richtig.
Diese Fähigkeit ist der Hauptgrund, warum so viele ältere Visual BASIC 6-Programmierer sehr verärgert über MS Änderungen an der Sprache sind. Zum Beispiel das Schlüsselwort Integer, das Int32 anstelle von Int16 ausgibt.
Module sind anderen Baugruppen ausgesetzt, die auf die ursprüngliche Baugruppe verweisen, solange das Modul für öffentlich erklärt wird.
Denken Sie, dass Sie die Fähigkeiten von VB.Net missverstehen. Module sind keine freigegebenen/statischen Klassen, sie sind global für die Namespace-Methoden, die überall verwendet werden können. Sie sind normalerweise Typ abstrakt, keine Erweiterungen. Funktionen, Subs und sogar Extensions leben alle aus der OOP-Blase, beschrieben von @ Konrad-Rudolph – GoldBishop
Ein weiterer Punkt für zukünftige Betrachter .... Die Namen der Module dürfen nicht den gleichen Namen zwischen Bibliotheken haben. Die Namen müssen im Namen zwischen den Verwendungen eindeutig sein. – GoldBishop