171 Stimmen

Klassen vs. Module in VB.NET

Ist es eine akzeptable Praxis, Module anstelle von Klassen mit Shared Member Functions in VB.NET zu verwenden?

Ich tendiere dazu, Module zu meiden, weil sie sich wie Überbleibsel von Visual Basic 6.0 anfühlen und nicht mehr so recht hineinzupassen scheinen. Andererseits scheint es keinen großen Unterschied zwischen der Verwendung eines Moduls und einer Klasse mit nur gemeinsam genutzten Mitgliedern zu geben. Ich brauche beides nicht so oft, aber manchmal gibt es Situationen, in denen sie eine einfache Lösung darstellen.

Ich bin neugierig zu erfahren, ob Sie eine Meinung oder Präferenz für die eine oder andere Seite haben.

11 Stimmen

Interessant an Modulen ist, dass die darin deklarierten Methoden und Funktionen standardmäßig die Schutzstufe des Moduls haben, was bedeutet, dass Sie versehentlich Methoden verfügbar machen könnten, wenn Sie vergessen, explizit die Option Private Bezeichner. In einer Klasse ist die Standard-Schutzstufe privat, was verwirrend sein kann, wenn man sich dessen nicht bewusst ist.

0 Stimmen

ICH BIN SO DANKBAR, DASS ICH DIES GEFUNDEN HABE! Ich habe mir das Hirn zermartert, um herauszufinden, wie Intellisense auf so viele andere Methoden und dergleichen zurückgreifen kann, ohne die Klassen explizit zu instanziieren, da ich mehrere Klassen entwickle, die ich devrait global sein, und mehr Erfahrung mit VBA haben Global Attribut, bin ich begeistert zu erfahren, dass Modules sind in der Tat genau das, wonach ich suche.

6voto

JRS Punkte 1408

Wenn eine meiner VB.NET-Klassen alle gemeinsamen Mitglieder hat, konvertiere ich sie entweder in ein Modul mit einem passenden (oder anderweitig geeigneten) Namespace oder ich mache die Klasse nicht vererbbar und nicht konstruierbar:

Public NotInheritable Class MyClass1

   Private Sub New()
      'Contains only shared members.
      'Private constructor means the class cannot be instantiated.
   End Sub

End Class

3 Stimmen

Und hier ist die Syntax für ein Modul mit Namensraum: Imports <whatever> wenn Sie Einfuhren haben, Namespace MyCoolModule , Public Module MyCoolModule , <Mitglieder ohne Shared >, End Module , End Namespace .

0voto

GGSoft Punkte 399

Module sind gut für die Speicherung von Enums und einige globale Variablen, Konstanten und gemeinsame Funktionen. seine sehr gute Sache, und ich benutze es oft. Deklarierte Variablen sind im gesamten Projekt sichtbar.

0voto

SteveCinq Punkte 1794

Sie muss Verwenden Sie ein Modul (statt einer Klasse), wenn Sie Erweiterungsmethoden erstellen. In VB.NET ist mir keine andere Möglichkeit bekannt.

Da ich selbst resistent gegen Module bin, habe ich gerade ein paar wertlose Stunden damit verbracht, herauszufinden, wie man etwas Boilerplate-Code hinzufügt, um eingebettete Assemblies in einem Modul aufzulösen, nur um herauszufinden, dass Sub New() (Modul) und Shared Sub New() (Klasse) sind gleichwertig. (Ich wusste nicht einmal, dass es war eine abrufbare Sub New() in einem Modul!)

Also warf ich einfach die EmbeddedAssembly.Load y AddHandler AppDomain.CurrentDomain.AssemblyResolve und Bob wurde mein Onkel.

Nachtrag : Ich habe es noch nicht zu 100% überprüft, aber ich habe eine Ahnung, dass Sub New() in einem Modul in einer anderen Reihenfolge abläuft als in einer Klasse, nur aufgrund der Tatsache, dass ich einige Deklarationen von außen nach innen in die Methoden verschieben musste, um Fehler zu vermeiden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X