IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

polymorphisme et paramètre par référence.


Sujet :

C#

  1. #41
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Depuis la création du basic, la déclaration et le typage des variables ne sont pas obligatoires. (comme en php, je crois)

    Ce n'est qu'à partir de VB4 que 'Option explicit' est apparue qui lorsqu'il est à ON oblige les développeurs à déclarer les variables.

    Option Strict n'est apparue qu'avec Vb.net (je crois).

    Ces options ont toujours été optionnelles pour permettre une compatibilité avec les versions précédentes.
    Tu peux convertir du code VB6 en Vb.Net (enfin ça dépend des fois) sans avoir à faire des énormes modifications en ce qui concerne les affectations de variables (voire les déclarations de variables)...

  2. #42
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Citation Envoyé par maa Voir le message
    En effet, je trouve un cas qui peut facilement induire en erreur :

    Considérons ces 2 méthodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Sub MySub(ByVal param1 As List(Of String))
            Console.WriteLine(param1(0))
        End Sub
     
        Sub MySub(ByVal param1 As IList, Optional ByVal param2 As Boolean = True)
            Console.WriteLine(param1(1))
        End Sub
    Un utilisateur va appeler la méthode en utilisant la 2ème surcharge comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            Dim list As New List(Of String)
            list.Add("1 er élément")
            list.Add("2 nd élément")
            MySub(list, True)
    Puis, plus tard il se rend compte que le 2ème paramètre est inutile. Il décide de le supprimer et il se rend compte alors que l'affichage dans la console n'est pas le même...

    Je suis d'accord, il vaut mieux être plus rigoureux a l'écriture du code et la compilation si ça peut éviter des mauvaises surprise à l'exécution.
    Par contre quand on utilise des classe VB depuis du code C#, ça devient vite galère (pour les raisons cité plus haut). On le voit déjà quand on développe un projet VSTO.

    Pour revenir un peu sur le sujet, je voulais réagir sur ce message.
    Le paramètre optionnel n'est pas vraiment le problème, c'est plus un problème lié au généric.
    Tu peux rencontrer le même problème en C#

    Ici en executant ma procédure MonExemple le message Test apparait bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    private void MonExemple
    {
      List<string> test = new List<string>();
      test.Add("Donnee1");
      test.Add("Donnee2");
     
      MySub(test);
     
    }
    void MySub(System.Collections.IList param1)
    {
      MessageBox.Show("Test");
     
     
    }
    Ensuite si je décide d'ajouter une surcharge comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    private void MonExemple
    {
      List<string> test = new List<string>();
      test.Add("Donnee1");
      test.Add("Donnee2");
     
      MySub(test);
     
    }
    void MySub(System.Collections.IList param1)
    {
      MessageBox.Show("Test");
     
     
    }
    // j'ajoute ici une surcharge
    void MySub (List<string> param1) 
    {
      MessageBox.Show("Test2");
     
    }
    Cette fois, par contre, lorsque je vais executer ma procédure MonExemple, c'est le message "Test2" qui va s'afficher.
    Ce problème n'est pas detecté par le compilateur (du moins chez moi)

  3. #43
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Citation Envoyé par Kelpan Voir le message
    Ce problème n'est pas detecté par le compilateur (du moins chez moi)
    Je ne vois pas en quoi c'est un problème. C'est logique que ce soit la 2eme méthode qui soit utilisée. C'est elle dont le paramètre correspond le mieux.
    Il n'y a pas de pb d'ambiguité pour le compilo.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  4. #44
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 185
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 185
    Par défaut
    Bonjour.

    Citation Envoyé par tomlev Voir le message
    Ben justement, je trouve pas ça tellement plus facile d'apprendre avec un langage qui te laisse faire plein d'erreurs... mais bon, ça doit venir du fait que Basic (tout court) a longtemps été le langage des débutants...
    T'as encore fait ton Csharpiste trolleur sans faire exprés ! merci pour eux !

    Citation Envoyé par tomlev Voir le message
    En fait, je pense que VB.NET est plus ou moins équivalent à C#, à condition d'utiliser Option Strict On. Sinon c'est limite dangereux, il donne même pas un warning pour des trucs qui devraient être complètement interdits !
    Entiérement d'accord, ça devrait être mis en gros quelque part sur le forum VB.Net d'ailleurs avec "Option Explicit On", ça limiterait les posts du à ça !

    Pour revenir aussi au sujet :

    Un Object en paramétre ça équivaut à aller directement à l'abattoir...
    Au début, on sait ce qu'on doit passer et puis à la fin, les dev se succédant, on ne sait plus... et on se retrouve à passer 1 kilo de pattes dans une procédure éplucher(truc as objet) qui gére les carottes et les concombres.

    Pour faire du polymorphisme facilement, il existe les implémentations, et dans ce cas, un seul cast suffit.

    Pour les paramétres optionnel, je vois vraiment pas l'intérêt quand on peut utiliser des signatures de méthodes différentes.

    Le probléme général de l'utilisation du VB.Net, c'est que comme dit Tomlev (à sa façon ), c'est que celui qui a pris l'habitude du VB ou même du VBA est tenté d'aller vers le VB.Net comme ça, les mains dans les poches ... sans aucune notion de POO de base.

    Cdt.

  5. #45
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olsimare Voir le message
    T'as encore fait ton Csharpiste trolleur sans faire exprés ! merci pour eux !
    M***e , je suis grillé

  6. #46
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Citation Envoyé par The_badger_man Voir le message
    Je ne vois pas en quoi c'est un problème. C'est logique que ce soit la 2eme méthode qui soit utilisée. C'est elle dont le paramètre correspond le mieux.
    Il n'y a pas de pb d'ambiguité pour le compilo.
    Oui, je suis entièrement d'accord, c'est tout à fait logique que ce soit la 2ème methode qui soit utilisée.
    ... tout comme l'exemple de maa lorsqu'il supprime le paramètre optionnel...

    En fait, le compilateur n'a rien à voir la dedans....

Discussions similaires

  1. Passage de paramètres par référence
    Par margagn dans le forum Framework .NET
    Réponses: 2
    Dernier message: 08/05/2007, 23h08
  2. [POO] Passage de paramètre par référence.
    Par abidi_niz dans le forum Langage
    Réponses: 3
    Dernier message: 12/10/2006, 12h20
  3. [C#] passage de paramètres par référence
    Par SesechXP dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/08/2006, 12h48
  4. [C#] Envoie des paramètres par référence
    Par efficks dans le forum C#
    Réponses: 4
    Dernier message: 29/11/2005, 23h53
  5. [EJB] Passage des paramètres par référence
    Par salome dans le forum Java EE
    Réponses: 2
    Dernier message: 05/07/2005, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo