_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008
-
20 févr. 2008 à 19:10
_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008
-
22 févr. 2008 à 14:36
Bonjour,
Voici, ma classe (la question viendra après) :
Option explicit on
Option strict on
Public
Class TabCommandes
Private _tbCommandes
As ArrayList
Sub
New (
ByVal _tbCommandes
As ArrayList)
Me._tbCommandes = _tbCommandes
End
Sub
Public
Property tbCommandes()
As ArrayList
Get
Return
Me._tbCommandes
End
Get
Set (
ByVal value
As ArrayList)
Me._tbCommandes = value
End
Set
End
Property
End class
tbCommandes contiendra des objets "Commande".
Voici, ma question :
Y a-t'il un moyen de spécifier dans ma classe que mon ArrayList contiendra des objets "Commande" ? Lorsqu'il y a l'option strict, voici le message d'erreur :
Erreur 1 Option Strict On rejette toute liaison tardive.
En revanche, en mettant strict sur Off ou en commentaire, ça passe, mais je trouve que ce n'est pas propre. Auriez-vous une suggestion ?
n.b. si j'ai choisi un ArrayList c'est parce qu'il est dynamique et donc pas obligé de spécifié une taille dans le main().
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 20 févr. 2008 à 20:09
Salut
Peux-tu mettre la maniere dont tu utilises ta classe.
Il faut avec des arraylist faire des cast pour lire les données, à l'interieur
Le problème vient des conversions
Exemple
malist.add(new Foo())
dim f = CType(malist.items(0),Foo)
ou
dim f = Directcast(malist.items(0),Foo)
Ce qui est le mieux c'est à la place d'utiliser des ArrayList c'est d'utiliser les List générique
(plus optimisée car evite les cast et le boxing/unboxing sur les types par valeur)
de plus c'est plus sécurisé
Car dans une List (of X) tu peux ajouter que des X ou des sous type de X, et en plus tu as l'intellisense.
_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008 21 févr. 2008 à 11:17
Oubli ! Je me fais "jeter" à cause de cette méthode :
Public
Function Calcul
As
Single
Dim i
As
Integer
Calcul = 0
For i = 0
To
Me._tbCommande.Count - 1
Calcul +=
Me._tbCommande(i).NbCommandes ' "Erreur 1 Option Strict On rejette toute liaison tardive" se déclenche ici (normal) car mon ArrayList n'est pas "typé" (si c'est possible de typer un arraylist ?) : NbCommandes de Commande, il ne connaît pas.
Next
Return Calcul
End
Function
============
Voici mon main :
imports project (dll qui comprend les objets TabCommandes et Commande)
dim tab as TabCommandes 'Tableau de commandes
dim objCmd as Commande
for i=1 to 5
objCmd =
New Commande(blablabla)
tab.Add (objCmd)
next i
=========
Attention, ça marche sans problème à condition que j'enlève le strict on dans ma classe/DLL, mais je trouve que ce n'est pas propre. Quant à ta proposition, je vais l'étudier (les objets List), car si c'est dynamique (pas besoin de spécifier la taille) et si je peux spécifier dans ma classe le type de ma List, dans mon exemple "list of Commande", pour moi c'est parfait car c'est le but recherché.
_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008 22 févr. 2008 à 14:36
Non, ça marche des 2 manières proposées : list (of commande) ou CType(tbCommande(i), Commande), sachant que tbCommande est un arrayslist de commande. merci à tous !