bonjour,
comment vérifier si déjà une instance de la classe est déjà créée ?
ClasseA a = new ClasseA();
...
Merci
bonjour,
comment vérifier si déjà une instance de la classe est déjà créée ?
ClasseA a = new ClasseA();
...
Merci
Tu ajoute un compteur à ta classe :
Tu ajoute un int static a ta classe (renseigne toi sur la signification de Static, c'est tres important.)
tu l'incremente dans le constructeur, tu le décrémente dans le destructeur
Quand tu fais un new MaClasse(), appelle ensuite ObjetConstruit pour vérifier si elle est bien true, si elle est false, détruit l'objet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Class MaClasse{ private static int count = 0; private bool ObjetOK; public bool ObjetConstruit { get{return ObjetOK;} } MaClasse() { count ++; if (count == 1) { //Construction ObjetOK = true; } else ObjetOK = false; } ~MaClasse() { count --; } }
MaClasse monobjet = MaClasse();
if (monobjet.ObjetConstruit == false)
monobjet = null;
Le pattern Singleton te permet de n'avoir qu'une seule instance de ta classe.
Il ne répond pas précisément à la question "ma classe est-elle instanciée ?", mais au-delà de cette question, ce qui t'intéresse c'est peut-être le besoin de n'avoir qu'une seule instance de classe (comme l'indique le titre du post).
Quelques remarques amicales
1. Ton implémentation contient à peu près tout ce qu'il ne faut pas faire en .NET à propos de la gestion de la mémoire.
Tu utilises la notion de destructeur qui sert à libérer des ressources, elle ne doit jamais être utilisée dans un but fonctionnel. Un destructeur ne doit accéder à des ressources que dans le but de les libérer (cf le pattern IDisposable)
2. Ta logique est contraire aux bonnes pratiques de développement objet, à savoir :
- un constructeur doit construire l'objet dans TOUS les cas dès qu'il est appelé. Si l'objet ne peut pas être construit, le constructeur doit déclencher une exception.
- il ne faut jamais utiliser de méthodes de type Initialize() ou ObjetConstruit (dans ton exemple), c'est contraire au principe précédent qui définit qu'un objet est utilisable dès qu'il est construit.
3. Ton code n'est pas thread-safe![]()
Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.
Bonnes pratiques pour les accès aux données
Débogage efficace en .NET
LINQ to Objects : l'envers du décor
Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter
Partager