Je veux savoir s'il existe un équivalent de (.NET) dans vb6 p> Je sais que l'existence de la collection dans VB6 mais il utilise un objet (variante) au lieu d'un objet spécifique. p> merci. p> p>
5 Réponses :
VB6 est une langue ancienne. Il ne contient pas de types de modèle comme il y a dans les langues modernes (C ++, C #, Java). Donc, vous devrez stocker vos objets comme des variantes de la collection, puis les jeter à votre type d'objet plus tard. P>
Je travaille habituellement avec C # dans divers projets, mais pour des exécutables autonomes. Pourquoi?. Parce que .NET est lent (dans la plupart des cas), il peut être facilement décompilé, il a nécessité le cadre net, il ne fonctionne pas avec la plupart des systèmes d'exploitation, VB6 peut fonctionner de Windows95 à Linux (avec du vin sans trop d'effort). Et Java pour le stand seul exécutable est "funky" au mieux. Mon autre option est Delphi et C ++ mais c'est une autre histoire.
Votre raisonnement est faux. VB6 manque de types génériques non parce que c'est une langue ancienne (ce qu'elle n'est pas, C ++ est beaucoup plus âgée), mais parce que c'était une décision consciente de garder ce genre de complexité de la langue qui a une niche complètement différente.
Notez que je n'ai pas bownvote, car -2 est plus que suffisamment bas pour un poste qui fournit en effet la bonne réponse. Mais je pense que cela convient de souligner que nous, en tant que programmeurs, ne toujours i> avez le luxe de choisir la langue que nous voulons. Votre suggestion n'est pas vraiment utile et probablement plus frustrante que tout. Et pour ce que ça vaut la peine, vous vous souviendrez peut-être de la vie avant les génériques de cette "antique" C # 1.1 ...
Ce commentaire était principalement destiné à exprimer ma forte aversion de la langue / la syntaxe de base elle-même. Mais je suppose que cela aurait mieux correspondre dans un commentaire que dans une réponse.
EDIT: Si la solution de Cody Gray est trop surdimensionnée pour vos besoins, vous pouvez essayer la solution "Liste des pauvres", comme suit: bien sûr, une liste
(de ciixedclass) code> dans vb.net est beaucoup plus "convivial" car il a des méthodes telles que trouver, supprimer, addrange et d'autres choses utiles. L'ancienne construction VB6 traite très mal avec le cas "Liste vide". Ne pas oublier, la liste <..> L'augmentation a beaucoup de meilleures performances pour les grandes listes (taille> 1000). P> p>
Il s'agit d'une solution plausible, sauf que les performances de Redim conserve code> peuvent être tueuses si vous vous trouvez en appelant beaucoup. Utilisation de tableaux ou d'une collection code> dans VB 6 est une décision de conception importante et le meilleur conseil est que si vous savez (ou peut être étroitement approximatif), le nombre d'articles que vous aurez à l'avance, vous devriez devoir optez pour un tableau. La performance est légèrement meilleure qu'une collection
code>, mais si vous allez ajouter et supprimer de manière dynamique des objets, une collection
code> est probablement le meilleur choix.
@Cody Grey: Oui en effet, la performance peut devenir mauvaise de cette façon. Dans les programmes les plus réels au monde, j'ai écrit les 5 dernières années à Excel-VBA, le cas de la liste 98% d'une liste est une liste avec moins de 500 entrées, où cette solution si suffisante.
Il n'y a pas d'équivalent en VB 6 au générique Cela étant dit, il existe une solution que vous pouvez mettre en œuvre. De même à la façon dont les collections ont été mises en œuvre dans les premières versions de VB.NET avant génériques ont été introduits, vous pouvez envelopper le « collection personnalisée » strong>. Cela a l'avantage de la coulée de manutention automatique, et pallie les consommateurs de votre code d'avoir à se rappeler de l'esprit les détails de mise en œuvre comme celle-ci. Il prend en charge la (trop probable) possibilité que vous serez Boucler dans une collection à l'exécution qui est censé ne contenir qu'un seul type d'objet, mais avait accidentellement une seconde, le type d'objet incompatible a ajouté que provoque votre code de lancer une exception. Bien sûr, l'inconvénient est que vous devez réimplémenter la plupart des fonctionnalités déjà fournies par le Voici un exemple de la façon dont vous pouvez aller à ce sujet: p> Liste
Collection code> VB 6, qui fournit des fonctionnalités similaires. La principale différence est que VB 6
Collection code> est pas fortement typé em>, ce qui signifie que tous les objets sont stockés comme
Variantes code> dans la collection. Dans certains cas, cela peut être bénéfique, car il vous permet de stocker différents types de données dans la même collection, et en fait, VB utilise cet objet en interne. Il est assez facile d'utiliser un
Collection code> et objets haut coulés comme ils sont récupérés de la classe, mais il y a peu, vous pouvez le faire. Il est impossible de mettre en œuvre des collections fortement typées dans l'exécution VB.
Collection code> dans une classe, où le seul accès à l'interne
Collection code> est par des méthodes que vous exposiez de cette classe strong>. Ce modèle de conception est communément appelée p>
Collection code> vous-même, sous la forme de méthodes publiques sur votre collection personnalisée. P>
Public Property Get NewEnum() As IUnknown
''#Provides support for enumeration using For Each
Set NewEnum = m_Customers.[_NewEnum]
End Property
+1. IMHO Cette solution (correcte) est utile dans beaucoup de cas, mais pour d'autres cas, il peut être un peu trop surdimensionné.
@Doc Brown: convenu. Excellent choix de mots.
+1 mais ne créez pas vous-même la chaudière vous-même. Francesco Balena a écrit CollectionClassmaster , un plug-in gratuit pour l'IDE VB6 qui le fera pour vous automatiquement. Ceci est maintenant gentiment hébergé par angryhacker a >)
CollectionClassmaster est maintenant hébergé sur Devx
Voici notre mise en œuvre de l'arraylist. Vous pouvez l'utiliser comme une base (pas par héritage évidemment, mais par la composition, comme indiqué dans la réponse de Codygray) pour une classe fortement dactylographiée, mais si vous n'avez pas besoin de sécurité, il est bien meilleur que la classe de collecte.
+1 solution intéressante. Juste hors de curiosité: avez-vous préparé cela comme étant plus rapide pour les ajouts / insertions que la catégorie code> code>? Ou de quelle manière avez-vous voulu dire que c'était mieux?
De quelle manière est-ce mieux? La collection peut accidentellement devenir un dictionnaire, sans votre connaissance. Ensuite, votre compte est, dites 5, mais les éléments sont (0,1,4,5,6), vous obtenez une erreur lorsque vous essayez d'accéder à l'élément 3 et d'obtenir une erreur. En outre, il est plus rapide si vous définissez GRÔLEZIZE pour être approprié pour la taille de votre matrice (oui, cela pourrait probablement s'améliorer en doublant à chaque fois que cela augmente, mais c'est une micro-optimisation qui ne vaut pas le code supplémentaire). Cependant, ces jours-ci (quand il a été écrit, la vitesse d'un processeur était d'environ 200 MHz) l'efficacité n'est pas ce qui est important, ce n'est pas un bogue.
Dictionnaire est le meilleur moyen de contenir n'importe quel objet. P>