Module (Module) in Visual Basic werden historisch verwendet, um Verfahren, Funktionen und Variablen zu speichern, die im gesamten Projekt ohne explizite Instanziierung zugänglich sind. Mit der Einführung von Klassen überlappen sich ihre Rollen teilweise, jedoch bestehen wesentliche Unterschiede.
Hintergrund:
Im klassischen Visual Basic (VB6) waren Module der einzige Weg, um gemeinsame Funktionen und globale Variablen zu gruppieren. In VB.NET bleiben Module bestehen, jedoch mit erweiterten Möglichkeiten der Klassen.
Problem:
Ein Entwickler versteht möglicherweise den Unterschied zwischen einem Modul und einer Klasse nicht, was zu einer falschen Wahl der Speicherung von Logik, versehentlicher Duplizierung von Code oder unerwartetem Verhalten von Variablen führen kann.
Lösung:
Die Wahl zwischen Modul und Klasse hängt von den Zielen ab:
Codebeispiel:
' Modul Module MathUtils Public Function Add(x As Integer, y As Integer) As Integer Return x + y End Function End Module ' Verwendung Dim result = MathUtils.Add(5, 10)
Schlüsselfunktionen:
Shared und ohne Instanz zugänglich.Wenn eine Variable im Modul als Public deklariert wird, ist sie dann für alle Forms/Klassen der Anwendung global?
Ja. Public Variablen im Modul sind im Wesentlichen global. Sie sind aus jedem Codeprojekt zugänglich, was praktisch ist, jedoch zu Fehlern bei Mehrfachverarbeitung oder unbeabsichtigtem Überschreiben von Werten führen kann.
Kann man ein Modul mit New instanziieren?
Nein. Module werden nicht instanziiert. Ihre gesamte Funktionalität ist statisch verfügbar.
Kann ein Modul vererbt oder mit Zugriffsmodifikatoren Protected oder Private deklariert werden?
Nein. Module sind nicht vererbbar und werden nur auf Namespace-Ebene deklariert, sie können nicht geschachtelt oder mit anderen Zugriffsmodifikatoren als Public oder Friend versehen werden.
Im Projekt werden alle Variablen des Benutzerzustands als Public im Modul deklariert. Mit jeder Wertänderung in einem Form wird dieser sofort für alle anderen neu.
Vorteile:
Nachteile:
Das Modul wird nur zur Speicherung von Hilfsutilitäten (zum Beispiel Umwandlungsfunktionen) verwendet, während der Benutzerzustand in Klassen mit Kapselung gespeichert wird.
Vorteile:
Nachteile: