2010-08-13 7 views
5

Je commence à avoir des messages contradictoires à ce sujet, j'espère que quelqu'un pourra me corriger.Quand utiliser les méthodes partagées dans .NET

devrais-je utiliser des méthodes/fonctions partagées dans la situation suivante:

J'ai une classe générique nommée « Personne ». Cette classe représente une personne dans la base de données.

J'ai une classe de gestionnaire nommée "PersonManager". Cette classe contient des méthodes qui ajoute, met à jour et supprime des objets Person individuels. Une méthode existe également pour rechercher des personnes dans la base de données.

Ces méthodes de la classe manager doivent-elles être déclarées en tant que méthodes partagées? Ou est-il plus approprié de créer une nouvelle instance de la classe PersonManager à chaque fois et d'appeler la méthode appropriée.

Ainsi, si elle est partagée:

PersonManager.AddPerson(NewPerson) 

par rapport non partagé:

Dim MyPersonManager as PersonManager 
MyPersonManager.AddPerson(NewPerson) 

lors de la recherche des personnes, la version partagée serait:

Dim dt as New DataTable 
dt = PersonManager.GetPersons 

par rapport à la non version partagée:

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

Voici la réponse C# http://stackoverflow.com/questions/241339/when-to-use-static-classes-in-c Remplacer le mot static par shared pour le VB Answer – Bob

Répondre

1

Les méthodes et les membres partagés sont appelés statiques en C# il y a déjà des choses sur Stack Overflow ...

When to use static classes in C#

+0

Merci pour le lien! J'ai été en mode VB pour le passé et je n'avais pas considéré le côté C# des choses. – Michael

2

Utilisez des méthodes statiques (partagées dans Visual Basic) lorsqu'elles contiennent un comportement qui n'est pas associé à un objet particulier. Ils ne nécessitent aucun état pour effectuer leurs tâches.

Voir Static Classes and Static Class Members sur MSDN:

Une méthode statique, champ, une propriété ou un événement est appelable sur une classe, même si aucune instance de la classe a été créée. Si des instances de la classe sont créées, elles ne peuvent pas être utilisées pour accéder au membre statique. Une seule copie des champs et des événements statiques existe, et les méthodes et propriétés statiques ne peuvent accéder qu'aux champs statiques et aux événements statiques. Les membres statiques sont souvent utilisés pour représenter des données ou des calculs qui ne changent pas en réponse à l'état de l'objet; Par exemple, une bibliothèque mathématique peut contenir des méthodes statiques pour calculer le sinus et le cosinus.

Dans votre cas, vous avez probablement ne voulez utiliser des méthodes statiques si PersonManager contient un état d'objet. Au lieu de cela, vous devriez être capable de créer plusieurs objets PersonManager et de les manipuler séparément.

+0

Donc dans cet exemple, est-ce que PersonManager est considéré comme contenant l'état de l'objet? Actuellement, il me semble que le PersonManager fait juste quelque chose et ne tient rien. Je me questionne sur les meilleures pratiques. Un autre exemple pourrait être la gestion des erreurs.Où une méthode est utilisée pour envoyer un e-mail contenant l'erreur d'exception à quelqu'un. Une méthode partagée/statut semble le mieux pour un tel cas, oui? – Michael