Déclaration d'un tableau dans une classe [Résolu]

cs_simH 13 Messages postés lundi 13 juillet 2009Date d'inscription 18 juin 2010 Dernière intervention - 5 août 2009 à 21:12 - Dernière réponse : cs_simH 13 Messages postés lundi 13 juillet 2009Date d'inscription 18 juin 2010 Dernière intervention
- 6 août 2009 à 00:01
Bonjour,

J'ai créé une classe C1 dans laquelle chaque instance aura comme attribut un nom et un tableau. Par la suite je veux pouvoir dans une méthode redimensionner-éditer ce tableau à souhait. Le code que j'ai écrit ne marche pas.

La classe ressemble à ça :
Option Explicit On

Public Class C1

    Private Name As String 'nom de l'instance
    Private dTabX() As Double 'tableau de l'instance

    'Je passe le code qui permet de créer l'instance avec New...
    '[...]

    'Propriété qui est censée faire référence au tableau
    Public Property TabX()
        Get
            Return Me.dTabX
        End Get
        Set(ByVal value)
            Me.dTabX = value
        End Set
    End Property

End Class


Maintenant, si j'essaye de travailler sur mon tableau dans un méthode quelconque avec le code suivant :

Private Sub MaMethode()
        Dim c1Inst1 As New C1("Nom1") 'la création de l'objet marche comme il faut
        ReDim Preserve c1Inst1.TabX(2) 'message d'erreur
End Sub


... je reçois le message d'erreur :
"Impossible d'effectuer un cast d'un objet de type 'System.Object[]' en type System.Double[]'."

Quelqu'un saurait-il m'aider pour me dire ce qui ne va pas et comment écrire la propriété TabX correctement ?

Merci d'avance !
Afficher la suite 

5 réponses

Répondre au sujet
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 5 août 2009 à 22:45
+3
Utile
Salut,

N'oublis pas types pour la propiétée :

Public Property TabX() As Double()
  Get
    Return Me.dTabX
  End Get
  Set(ByVal value() As Double)
    Me.dTabX = value
  End Set
End Property


_____________
Kenji
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Charles Racaud
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 5 août 2009 à 22:47
0
Utile
Salut

Utilise une arraylist ou mieux une list(of Double)
Commenter la réponse de nhervagault
cs_simH 13 Messages postés lundi 13 juillet 2009Date d'inscription 18 juin 2010 Dernière intervention - 5 août 2009 à 23:29
0
Utile
Merci Charles, ça marche impec' !

nhervagault, en général je n'utilise les ArrayList que lorsque je veux mettre des objets divers et variés dedans. Lorsque j'ai une liste de valeurs d'un type bien précis (Double, String,...) j'utilise des tableaux. Mais peut-être n'est-ce pas optimal. Tu pourrais m'expliquer l'avantage rapidement ?
Commenter la réponse de cs_simH
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 5 août 2009 à 23:48
0
Utile
L'avantage c'est que les tableaux ont une taille fixe en .net
du moins en c# je ne crois pas que le redim existe, a moins que c'est un clone ou un arraycopy derriere
Quand on le transforme en c#.

Les arraylist sont non typées donc problemes de cast.
Mais les listes generiques apport la solution
(objet, taille variable pas besoin de redim, et pas de casting, securité dans un list (of double) on peut mettre que du double.

Les inconvenients les objets (arraylist et list (of
sont des types plus lourd que les array simple.

Donc apres ca depend de l'utilité que tu as.
Exemple :
electronique --> Array (performance et la taille des elements est connus) WORD, BYTE, DWORD ....
application gestion --> List(of (taille inconnue gestion des stocks)
webservice (WSDL--> objet) --> Array pour la communication)

Esperant n'avoir rien oublié.
Commenter la réponse de nhervagault
cs_simH 13 Messages postés lundi 13 juillet 2009Date d'inscription 18 juin 2010 Dernière intervention - 6 août 2009 à 00:01
0
Utile
Merci pour ces précisions.

[quote="nhervagault"]
L'avantage c'est que les tableaux ont une taille fixe en .net
du moins en c# je ne crois pas que le redim existe, a moins que c'est un clone ou un arraycopy derriere
Quand on le transforme en c#.
/quote

Donc le problème se situerait plutôt dans la cas où on voudrait convertir le code (actuellement je suis avec VB et Redim marche bien !).

[quote="nhervagault"]
Les inconvenients les objets (arraylist et list (of
sont des types plus lourd que les array simple.
/quote

En fait je ne connaissais pas les List(Of T). Merci pour le conseil !
Commenter la réponse de cs_simH

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.