Différence entre tableau de String et tableau de double [Résolu]

Messages postés
5
Date d'inscription
vendredi 23 juillet 2010
Statut
Membre
Dernière intervention
4 octobre 2011
- - Dernière réponse : blintello
Messages postés
5
Date d'inscription
vendredi 23 juillet 2010
Statut
Membre
Dernière intervention
4 octobre 2011
- 4 oct. 2011 à 16:39
Bonjour à tous,

Je suis en train de créer un classe Tableau. J'ai les deux constructeur suivant :
n°1
Public Sub New(ByVal Tab As Object)

End Sub

et n°2
Public Sub New(ByVal Tab(,,) As Object)

End Sub


Dans mon code principal j'ai :
Dim Tab(1,2,3) as Double
Dim truc As New Tableau(Tab)


Et là selon le type de Tab j'obtiens :
- Double => constructeur 1
- Integer => constructeur 1
- Boolean => constructeur 1
- String => constructeur 2 !!

Et là j'avoue que je comprends pas, c'est quoi la différence pour vb entre string et les autres types ? Si quelqu'un a une idée et en plus une solution pour que String => constructeur 1 ça m'aiderait beaucoup !

Merci
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46
3
Merci
Bonsoir Henry

si j'ai ça il va au premier constructeur
Public Class Class1
    Public Sub New(ByVal Tab1 As Object)

    End Sub
    Public Sub New(ByVal Tab1() As Object)

    End Sub
   Public Sub New(ByVal Tab1(,) As Object)

    End Sub
End Class
Dim blabla(2, 2, 2) As String
Dim testclass As New Class1(blabla)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_ShayW
Messages postés
5
Date d'inscription
vendredi 23 juillet 2010
Statut
Membre
Dernière intervention
4 octobre 2011
3
Merci
@ShayW
J'avoue je suis surpris si j'utilise ton code effectivement je tombe bien dans le constructeur 1. Mais en comparant avec mon code je crois avoir compris le vice.
Teste ça :
Public Class Class1
    Public Sub New(ByVal Tab1 As Object)

    End Sub
    Public Sub New(ByVal Tab1() As Object)

    End Sub
   Public Sub New(ByVal Tab1(,) As Object)

    End Sub
   Public Sub New(ByVal Tab1(,,) As Object)

    End Sub
End Class
Dim blabla(2, 2, 2) As String
Dim testclass As New Class1(blabla)

et tu vas voir qu'il va dans le dernier ! En fait pour les string, le constructeur tableau doit plus "matcher" que l'objet simple, mais il peut se rabattre sur un objet simple s'il n'a rien de mieux.

La solution semble donc très simple : supprimer les constructeurs qui ne servent à rien !

@NHenry
Oui je sais que object est dangereux, mais une de mes problématiques est de typer au minimum ma classe tableau.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de blintello
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46
0
Merci
Salut
j'ai testé
peut etre
quand on écrit
dim la chaine(1,2,3) as string

string est aussi une class
ce n'est pas un type de donné comme integer

pourquoi as tu besoin de deux constructors ?
Commenter la réponse de cs_ShayW
Messages postés
5
Date d'inscription
vendredi 23 juillet 2010
Statut
Membre
Dernière intervention
4 octobre 2011
0
Merci
Oui c'est ce que je suis en train de me dire, que string à un comportement spécial, ça serait un tableau d'objet et non un objet tableau comme les autres...

Sinon pour mon second constructeur, c'est car au début je n'arrivais pas à passer un tableau de dimension quelconque, donc j'avais prévu des constructeur pour les dimensions de 1 à 3. Mais j'ai trouvé qu'en passant un objet au constructeur je pouvais passer un tableau de dimension quelconque... sauf pour les tableaux de string apparemment.
Dans l'absolu je virerais bien le second constructeur mais je dois trouver une solution pour gérer mes tableaux de string.
Commenter la réponse de blintello
Messages postés
14569
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 octobre 2019
136
0
Merci
Bonjour,

Rapidement, je me pose une question :
As-tu activé Option Strict et Option Explicit (propriétés du projet) ?

Je regarderais en détail plus tard, ce midi, je n'ai pas le temps.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
5
Date d'inscription
vendredi 23 juillet 2010
Statut
Membre
Dernière intervention
4 octobre 2011
0
Merci
Je ne connaissait pas ces options.
Les miennes sont Explicite=On et Strict=Off, et en regardant la doc dans cette config je devrais pouvoir faire des conversions implicites. Mais ici je pense que le problème est qu'il ne peut faire de conversion implicite car il doit convertir un tableau d'objets en un objet.
Commenter la réponse de blintello
Messages postés
14569
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 octobre 2019
136
0
Merci
Bonjour,

J'ai testé, et je pense que les types valeur (Integer, boolean, ...) utilisent le premier constructeur.
alors que les types objets (String, Form, ...) préfère utiliser le second.

2 solutions possibles :
- Retirer le constructeur Object
- Utiliser les Generic.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
14569
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 octobre 2019
136
0
Merci
Bonjour,

En .NET, en général, on évite le type Object (cet effet de bord en est aussi une explication).
Essayes plutôt de surcharger ton constructeur ou d'utiliser un generic.

Sub MaFonction(ByVal pParam(,,) As String)
End Sub
Sub MaFonction(ByVal pParam(,,) As Double)
End Sub
Sub MaFonction(ByVal pParam(,,) As Integer)
End Sub


ou

Friend Class Classe1(Of T)
Sub New(ByVal pParam(,,) As T)



Et :
MaVar=New Classe(Of Integer)(MonTableau)



Sinon, Option Strict DOIT TOUJOURS être à ON, même si c'est une option, tu verre pas mal d'erreur à l'avance.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46
0
Merci
Salut
et tu vas voir qu'il va dans le dernier !

normal il correspond le mieux
Au fait que doit faire ton constructeur ?
Commenter la réponse de cs_ShayW
Messages postés
5
Date d'inscription
vendredi 23 juillet 2010
Statut
Membre
Dernière intervention
4 octobre 2011
0
Merci
Mon constructeur va copier le tableau en interne et sauvegarder quelques info supplémentaires.
Le but est d'avoir une classe Tableau la plus flexible possible :
- Pouvoir extraire des sous tableaux avec un truc du genre MonTab(":","0:6","2,3")
- Gérer les opérations entre tableaux
- Se préoccuper au minimum du type des éléments
- D'autres choses selon les besoins

En tout cas merci à tous pour votre aide
Commenter la réponse de blintello