2010-08-13 6 views
5

Ich bekomme irgendwie gemischte Nachrichten darüber, so hoffe ich, dass jemand für mich dies klären kann.Wann gemeinsame Methoden in .NET zu verwenden

Soll ich Methoden geteilt werden unter Verwendung von/Funktionen in der folgenden Situation:

Ich habe eine generische Klasse namens „Person“. Diese Klasse repräsentiert eine Person in der Datenbank.

Ich habe eine Manager-Klasse namens "PersonManager". Diese Klasse enthält Methoden, die einzelne Personenobjekte hinzufügen, aktualisieren, löschen. Es gibt auch eine Methode, nach Personen aus der Datenbank zu suchen.

Sollten diese Methoden in der Manager-Klasse als gemeinsame Methoden deklariert werden? Oder ist es sinnvoller, jedes Mal eine neue Instanz der PersonManager-Klasse zu erstellen und die entsprechende Methode aufzurufen?

Also, wenn geteilt:

PersonManager.AddPerson(NewPerson) 

im Vergleich zu nicht-shared:

Dim MyPersonManager as PersonManager 
MyPersonManager.AddPerson(NewPerson) 

Wenn Personen nach oben, die gemeinsam genutzte Version wäre:

Dim dt as New DataTable 
dt = PersonManager.GetPersons 

im Vergleich zu dem nicht geteilte Version:

Dim dt as New DataTable 
Dim MyPersonManager as New PersonManager 
dt = MyPersonManager.GetPersons 
+4

Hier ist die C# Antwort http://stackoverflow.com/questions/241339/when-to-use-static-classes-in-c Ersetze das Wort static durch shared für die VB Antwort – Bob

Antwort

1

Da die gemeinsamen Methoden und Mitglieder statisch aufgerufen werden in C# bereits Material auf Stack-Überlauf ist ...

When to use static classes in C#

+0

Danke für den Link! Ich war in der Vergangenheit in VB-Modus und hatte nicht die C# -Seite der Dinge berücksichtigt. – Michael

2

Verwenden Sie statische Methoden (in Visual Basic freigegeben), wenn sie Verhalten enthalten, das keinem bestimmten Objekt zugeordnet ist. Sie benötigen keinen Staat, um ihre Aufgaben auszuführen.

Siehe Static Classes and Static Class Members auf der MSDN:

Eine statische Methode, Feld, eine Eigenschaft oder ein Ereignis ist auf eine Klasse aufrufbar, auch wenn keine Instanz der Klasse erstellt wurde. Wenn Instanzen der Klasse erstellt werden, können sie nicht für den Zugriff auf das statische Member verwendet werden. Es gibt nur eine Kopie statischer Felder und Ereignisse, und statische Methoden und Eigenschaften können nur auf statische Felder und statische Ereignisse zugreifen. Statische Elemente werden häufig zur Darstellung von Daten oder Berechnungen verwendet, die sich nicht als Reaktion auf den Objektzustand ändern. Zum Beispiel könnte eine Math-Bibliothek statische Methoden zur Berechnung von Sinus und Cosinus enthalten.

In Ihrem Fall, werden Sie wahrscheinlich nicht wollen statische Methoden verwenden, wenn PersonManager einig Objektzustand enthält. Stattdessen sollten Sie in der Lage sein, mehrere PersonManager Objekte zu erstellen und sie separat zu bearbeiten.

+0

Also wird in diesem Beispiel angenommen, dass PersonManager Objektstatus enthält? Momentan scheint mir der PersonManager etwas zu tun und nichts zu halten. Ich frage mich nur über Best Practice. Ein anderes Beispiel könnte die Behandlung von Fehlern sein.Wo wird eine Methode verwendet, um eine E-Mail mit dem Ausnahmefehler an jemanden zu senden? Eine geteilte/Status-Methode scheint für einen solchen Fall am besten zu sein, ja? – Michael