Utilisation des classes en vb6

[Résolu]
Signaler
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007
-
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007
-
Salut,

Sorti d'une discussion prise de tête concernant l'utilisation de classes dans d'autres classes sous vb6, j'aimerais avoir l'avis des pros.
Y a-t-il une réelle différence entre ces 2 manières de coder :

1 -
Private MaClasse As MonAutreClasse
Private Class_Initialize()
   Set MaClasse = New MonAutreClasse
End Sub

2 -
Private MaClasse As New MonAutreClasse

Perso je suis pour la 2ème manière mais je peux me tromper, c'est pourquoi je demande votre avis, n'ayant rien vu sur le web pouvant abonder dans un sens ou dans l'autre en terme de rapidité ou d'occupation mémoire.

3 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
pas top, la deuxième...  si on est tatillon :
http://www.vbfrance.com/tutoriaux/EXPRESSIONS-RATIONNELLES-REGULIERES_520.aspx

"Pourquoi pas Dim oRegExp As New RegExp ?La variable oRegExp doit être déclarée et instanciée. Il est donc tout à fait possible d'écrire :

'Cette variable vous permet de paramétrer une expression rationnelle

PrivateoRegExp
As NewRegExp
C'est
une écriture tout à fait correcte, mais contestable. Pourquoi ? Tout
simplement parce qu'une variable qui utilise "New" est considérée par
VB comme devant être auto-instanciée (cf. tutoriel sur l'optimisation
avec VB6). De fait, vous vous exposez à des vérifications
supplémentaires qui nuisent aux performances de votre programme (

Attention !Si vous faites un usage modéré des expressions rationnelles, vous ne sentirez pas la différence. Mais si vous êtes curieux de quantifier
cette différence de temps d'exécution, tournez-vous vers les API
QueryPerformanceCounter et QueryPerformanceFrequency. Il y a plusieurs
bonnes source sur le sujet sur VBFrance. Je vous propose celle-ci :
http://www.codes-sources.com/code.aspx?ID=39534).
"

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
124
oui, et puis le risque en déclarant un objet en As New en plus, c'est qu'il s'instancie automatiquement, donc le code suivant est légal :

Dim toto As New CToto

toto.name = "toto"
set toto = nothing

toto.name = "tata"

le risque que cela procure ? des fuites mémoires ! car si le As New est déclaré global au projet par exemple, toto existera toujours !

Si tu le déclare en :
Dim toto as CToto
set toto = new toto
toto.name = "toto"
set toto = nothing

si tu essaye de faire : toto.name = "tata", vb te dira que l'objet toto n'est pas valide.
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Effectivement, je n'avais pas vu les choses sous cet angle. Etant un peu fainéant ça m'arrangeait pourtant bien de taper une ligne au lieu de 2. Et puis, les classes sous vb6, c'est pas trop ma tasse de thé mais bon, je reprend un vieux prog qu'il faut optimiser et auquel il faut ajouter des fonctions tout en restant vb6.
Ce prog comporte près de 300 classes, sous classes et collections et il va falloir en rajouter . Et tout est codé suivant la méthode 2.
Suivant vos conseils, j'ai donc modifié un certain nombre (un nombre certain ?) de classes utilisant des sous classes et collections conformément à la méthode 1. Puis j'ai fait tester les fonctions utilisant ces classes par mon panel d'utilisateurs testeurs (c'est mieux que les API's).
Leur avis, "c'est mieux qu'avant". Donc, je m'incline, encore quelques tests pour être sûr que ce n'est pas uniquement psychologique ou le fait du hasard et j'adopte.

Merci pour votre aide.