2010-11-16 21 views
4

J'ai une classe à elle seule appelée clientChat qui fait des choses réseau de base. J'ai plusieurs autres classes liées à différentes formes de fenêtres. Dans ma première forme que j'ai une variable fait référence à la classe de chat comme ceci:référençant d'autres méthodes de classe sans créer une nouvelle instance

clientChat cc = new clientChat(); 

Tout fonctionne bien leur, la classe a été initialisé et tout est en mouvement. Après que les premiers formulaires aient été remplis, j'apporte mon deuxième formulaire qui est évidemment lié à un nouveau fichier de classe.

Maintenant, ma question est, comment puis-je référencer ce qui se passe dans la classe clientChat sans définir une nouvelle instance de la classe? Je dois passer les données du formulaire au networkstream et si je crée une nouvelle instance de la classe cela ne nécessiterait-il pas une nouvelle connexion au serveur et nécessiterait essentiellement que tout recommence depuis qu'il est "nouveau"? Je suis un peu confus et toute aide serait géniale, merci. C# sur .NET4.0

Répondre

1

On peut supposer que vous le feriez soit:

  1. Créer l'objet à partir du code qui crée et montre les deux formes, et passer une référence à cette même instance aux deux formes, ou:
  2. Si vous créez le second formulaire à partir du premier formulaire, passez une référence à l'instance référencée par le premier formulaire à la seconde en quelque sorte (via une propriété ou un constructeur, par exemple).
3

Vous pouvez créer une instance de clientChat au début de votre programme, puis transmettre simplement sa référence aux classes qui en ont besoin.

3

Vous voudrez peut-être examiner le motif de conception Singleton. M. Skeet a écrit un bon article sur la façon de l'implémenter en C# here. (Il suffit d'utiliser la version 4. c'est la plus simple et fonctionne bien =))

+0

Cela ne semble pas être un endroit approprié pour utiliser le modèle singleton. – cdhowie

+0

Pourquoi pas? L'OP ne semble pas vouloir créer deux connexions réseau au serveur, mais se référer à la première connexion initialisée dans différents contextes. J'ai utilisé le modèle Singleton dans ces cas. Était-ce inapproprié? – Jens

+0

L'approche pour faire passer les références autour de vous rapidement devient incontrôlable si le projet se développe. Quand je l'ai utilisé, chaque méthode et chaque classe a dû passer une instance de chatClient. =) – Jens

0

En plus de la réponse de @ Jens, il y a 5 approches sur la page liée, tandis que je pense que nous avons le 6ème en utilisant Lazy<T> in C# 4.0

public sealed class Singleton 
{ 
    private Singleton() { } 
    private static readonly Lazy<Singleton> m_instance = new Lazy<Singleton>(() => new Singleton()); 
    public static Singleton Instance 
    { 
     get 
     { 
      return m_instance.Value; 
     } 
    } 
}