Différence entre tableau de String et tableau de double

Résolu
blintello Messages postés 5 Date d'inscription vendredi 23 juillet 2010 Statut Membre Dernière intervention 4 octobre 2011 - 3 oct. 2011 à 10:44
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
A voir également:

10 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
3 oct. 2011 à 22:07
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)
3
blintello Messages postés 5 Date d'inscription vendredi 23 juillet 2010 Statut Membre Dernière intervention 4 octobre 2011
4 oct. 2011 à 10:38
@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.
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
3 oct. 2011 à 12:41
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 ?
0
blintello Messages postés 5 Date d'inscription vendredi 23 juillet 2010 Statut Membre Dernière intervention 4 octobre 2011
3 oct. 2011 à 12:50
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
3 oct. 2011 à 13:01
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
0
blintello Messages postés 5 Date d'inscription vendredi 23 juillet 2010 Statut Membre Dernière intervention 4 octobre 2011
3 oct. 2011 à 13:22
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.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
3 oct. 2011 à 19:18
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
3 oct. 2011 à 23:34
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
4 oct. 2011 à 11:21
Salut
et tu vas voir qu'il va dans le dernier !

normal il correspond le mieux
Au fait que doit faire ton constructeur ?
0
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
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
0
Rejoignez-nous