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

VB.NET Discussion :

Surcharge de fonctions en VB 2010


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Surcharge de fonctions en VB 2010
    Dans mon projet en VB 2010, j'utilise 2 fonctions dont le code et le nom sont strictement identiques, mais qui diffèrent par le type de données d'un des arguments et de la fonction.
    La première utilise et renvoie une combobox : function Toto(strArg as combobox) as combobox.
    Lla deuxième utilise et renvoie une listbox.

    Est-ce qu'il est possible de faire une surcharge de manière à n'avoir qu'un exemplaire du code et si oui, comment faut-il faire ?

    Merci d’avance pour vos réponses

  2. #2
    Invité
    Invité(e)
    Par défaut
    comme paramètre d'entrée et de sortie, utilise le type Object à la place.
    Puis, dans ton code, pour savoir si tu as un textbox ou un listbox, tu fais le test suivant :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if TypeOf(strArg) is TextBox Then
     'en entrée, j'ai un objet de type TextBox
    else
     'en entrée, j'ai un objet de type ListBox

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Merci pour ta réponse.
    Je teste dès que possible.

    Bonne journée

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Le type Object peut être une solution, mais ce n'est pas très élégant puisqu'il faudra caster à chaque fois... On peut plutôt préconiser l'utilisation des Generics :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function MonControl(Of T As Control)(ByVal input As T) As T
            ' Ta logique ici et a la fin on retourne le control :
            Return input
    End Function

    Ensuite pour l'utilisation :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim tb As TextBox = New TextBox()
    Dim lb As ListBox = New ListBox()
     
    Dim a As TextBox = MonControl(Of TextBox)(tb)
    Dim b As ListBox = MonControl(Of ListBox)(lb)
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    j'ajouterais qu'on doit pouvoir écrire
    car le type peut etre déduit sans le Of
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Effectivement Pol63 on peut aussi passer le type de manière implicite Donc on peut aussi utiliser comme ceci plus simplement :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim a As TextBox = MonControl(tb)
    Dim b As ListBox = MonControl(lb)
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    Désolé, j'ai mis du temps à répondre.
    Mes compétences limitées en VB ne m'ont pas permis de résoudre les quelques problèmes que j'ai rencontrés en essayant d'implémenter ce code.

    Ma question était peut-être trop imprécise. Dans le code de la fonction, je chargeais une listbox ou une combobox. L'ordre <objet>.items.add ne fonctionnait pas avec le code indiqué et me renvoyait une erreur que je n'ai pas su cooriger.*

    Au final, j'ai donc contourné le problème (peut-être pas élégant, mais ça fonctionne ) en chargeant une variable de type List(Of string) que je traite dans deux fonctions génériques qui chargent respectivement une listbox ou une combobox.

  8. #8
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Moi ça m'intéresse l'histoire du générique, j'ai tester le bout de code, mais je ne vois pas l'avantage, dans le sens où dans la fonction, on manipule l'objet input de type Control, mais on a accès qu'aux propriétés de la classe Control...

    Donc si on ne manipule que les propriétés communes, ok, mais dans notre exemple, si on veut remplir le control avec des éléments, il va falloir faire un cast de toute façon non ? pour avoir accès aux propriétés adéquat.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    il y a les classes génériques et les membres génériques
    ca peut etre utile dans certains cas

    le list(of T) est une classe générique, et là on voit tout de suite l'utilité, peu importe ce que l'on y stocke ca fonctionne (.Add et autre) et ca permet de garder l'intellisense alors qu'une collection d'objet non
    donc il arrive parfois qu'on fasse une classe qui manipule des objets mais pas les objets eux même

    sur les méthode générique ca permet de centraliser dans une méthode, avec un select case par exemple

    pour un factory aussi ca permet d'instancier une classe sans savoir ce que c'est

    j'ai pas d'exemple plus concret en tête sous la main, mais parfois c'est bien pratique
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Moi ça m'intéresse l'histoire du générique, j'ai tester le bout de code, mais je ne vois pas l'avantage, dans le sens où dans la fonction, on manipule l'objet input de type Control, mais on a accès qu'aux propriétés de la classe Control...

    Donc si on ne manipule que les propriétés communes, ok, mais dans notre exemple, si on veut remplir le control avec des éléments, il va falloir faire un cast de toute façon non ? pour avoir accès aux propriétés adéquat.
    Outre ce qu'a dèjà mentionné Pol63, l'autre grand avantage est de "centraliser" ce cast. On ne le fait qu'une fois et non à chaque fois qu'on a besoin de faire ce genre de manipulation. Dans ce cas précis, on peut aussi caster un peu plus précisément en utilisant un ListControl au lieu d'un Control.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  11. #11
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2014
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 196
    Points : 331
    Points
    331
    Par défaut
    Il existe certainement une classe commune dans la hiérarchies d'héritage à ces deux controles qui gère la séléction et les items.

    La hiérarchie de ComboBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    System.Object 
      System.Windows.Threading.DispatcherObject
        System.Windows.DependencyObject
          System.Windows.Media.Visual
            System.Windows.UIElement
              System.Windows.FrameworkElement
                System.Windows.Controls.Control
                  System.Windows.Controls.ItemsControl
                    System.Windows.Controls.Primitives.Selector
                      System.Windows.Controls.ComboBox
    La hiérarchie de ListBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    System.Object 
      System.Windows.Threading.DispatcherObject
        System.Windows.DependencyObject
          System.Windows.Media.Visual
            System.Windows.UIElement
              System.Windows.FrameworkElement
                System.Windows.Controls.Control
                  System.Windows.Controls.ItemsControl
                    System.Windows.Controls.Primitives.Selector
                      System.Windows.Controls.ListBox
    A mon avis dans System.Windows.Controls.ItemsControl on as la gestion des items
    et dans System.Windows.Controls.Primitives.Selector on as la gestion de la sélection.

    Pourquoi ne pas utiliser System.Windows.Controls.ItemsControl, comme type du paramètre de la méthode ainsi tu peut passer une ListBox ou une ComboBox à ta fonction (voir même un ItemsControl) .... Toujours regarder dans la documentation ....

  12. #12
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Citation Envoyé par champsy_dev Voir le message
    Il existe certainement une classe commune dans la hiérarchies d'héritage à ces deux controles qui gère la séléction et les items.

    A mon avis dans System.Windows.Controls.ItemsControl on as la gestion des items
    et dans System.Windows.Controls.Primitives.Selector on as la gestion de la sélection.

    Pourquoi ne pas utiliser System.Windows.Controls.ItemsControl, comme type du paramètre de la méthode ainsi tu peut passer une ListBox ou une ComboBox à ta fonction (voir même un ItemsControl) .... Toujours regarder dans la documentation ....

    System.Windows.Controls.ItemsControl, c'est pour du WPF...

    Une solution consisterait à faire une méthode qui attend une System.Collections.IList. On peut donc lui passer ListBox.Items ou une ComboBox.Items.

Discussions similaires

  1. surcharge de fonction
    Par BigNic dans le forum C++
    Réponses: 2
    Dernier message: 21/03/2006, 19h57
  2. API HOOK, Dump dll, Surcharge de Fonction
    Par MicroAlexx dans le forum Windows
    Réponses: 2
    Dernier message: 30/12/2005, 11h39
  3. [MFC] Surcharger des fonctions de CView
    Par Philippe320 dans le forum MFC
    Réponses: 2
    Dernier message: 22/11/2005, 22h24
  4. singleton, polymorphisme, et surcharge de fonction
    Par legend666 dans le forum C++
    Réponses: 11
    Dernier message: 14/11/2005, 10h27
  5. Surcharge de fonction d'un edit dynamique
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 4
    Dernier message: 13/10/2003, 12h56

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