Utilisation des classes en vb6

Résolu
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007 - 17 déc. 2006 à 22:47
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007 - 18 déc. 2006 à 20:41
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 déc. 2006 à 06:44
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
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 déc. 2006 à 07:06
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.
3
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
18 déc. 2006 à 20:41
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.
0
Rejoignez-nous