1. #1
    Membre régulier
    Profil pro
    Inscrit en
    juin 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2007
    Messages : 256
    Points : 115
    Points
    115

    Par défaut Déclarer et appeler une fonction avec "."

    Bonjour

    est-il possible avec VB.NET de déclarer et d'appeler des fonctions avec "." plutôt qu'en mettant le paramètre entre () ?

    Voici un exemple :

    fonction actuelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Public Function ToStringUnites(ByRef Valeur As Double) As String
            If UnitePreferee = Type_Unites.inch Then
                Return (Valeur / 25.4).ToString
            Else
                Return Valeur.ToString
            End If
        End Function
    ce que je voudrais faire, c'est pouvoir appeler ma fonction comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim X as double
    X = 27.42
    '...
    TxtX.Text = X.ToStringUnites
    plutôt que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TxtX.Text = ToStringUnites(X)
    Merci

  2. #2
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2008
    Messages
    1 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 491
    Points : 3 070
    Points
    3 070
    Billets dans le blog
    6

    Par défaut

    bonjour,

    Dans ce que tu exposes, non ce n'est pas possible !

    A moins de créer une classe (avec un constructeur prenant ta valeur en argument) dans laquelle tu exposerais la fonction ToStringUnites()..... Du coups x ne sera pas de type Double !

    A+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    juin 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2007
    Messages : 256
    Points : 115
    Points
    115

    Par défaut

    OK

    De toutes façon ce n'était pas très important

    A bientôt

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juillet 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : juillet 2005
    Messages : 429
    Points : 1 072
    Points
    1 072

    Par défaut

    Bonjour,

    Si c'est possible, c'est les méthodes d'extensions, qui permettent d'enrichir un type de base ou sur lequel on a pas la main.
    En tout cas j'en suis friant en C#, et pour les quelques premières réponses que google ma retournées, j'ai bien l'impression qu'elles existent aussi en VB.net...
    Le seul inconvénient que je leur voient c'est qu'il faut forcément faire un imports du module pour que les méthodes soient accessibles dans la page de code. Par contre une fois l'import fait, l'intelisense suit en te proposant tes méthodes d'extension

    Bon code,
    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    juin 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2007
    Messages : 256
    Points : 115
    Points
    115

    Par défaut

    Bonsoir,

    Effectivement ça marche très bien, et c'est très simple

    Voici une fonction "ToString" perso qui affiche la valeur qui normalement en m ou en mm en inch si l'utilisateur veux travailler en inch plutôt qu'en m ou mm :

    Ce code doit tenir dans un module intitulé DoubleExtensions.vb

    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
    Imports System.Runtime.CompilerServices
     
    Module DoubleExtensions
     
        <Extension()>
        Public Function ToStringUnites(ByVal Valeur As Double, Optional Metre As Boolean = False) As String
            If UnitePreferee = Type_Unites.inch Then
                If Metre Then
                    Return (Valeur / 0.0254).ToString
                Else
                    Return (Valeur / 25.4).ToString
                End If
            Else
                Return Valeur.ToString
            End If
        End Function
     
    End Module
    Et ca marche avec VB2010

    Cette possibilité est extrêmement puissante et intéressante : elle permet de compléter des classes existantes auxquelles dont on a pas accès au code.

    Cela permet d'avoir un code élégant sans devoir recréer tout un tas de classes ou de fonctions pour répondre à ses besoins.

    Je regrettes vraiment de ne pas avoir découvert ça plus tôt !

    Question à 3000$ : est-il possible d'ajouter également une propriété ou une variable à une classe existante ? Cette possibilité serait très utile notamment lorsqu'on doit utiliser une DLL mais que les structures de données de la DLL ne suffisent pas (typiquement, une classe dans laquelle on aimerait juste ajouter une variable ou un drapeau)

    A bientôt

  6. #6
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2008
    Messages
    1 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 491
    Points : 3 070
    Points
    3 070
    Billets dans le blog
    6

    Par défaut

    Effectivement je n'y avais pas pensé car je n'utilises jamais les extensions........ il y a déjà beaucoup à faire avec l'existant je trouve.

  7. #7
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    3 740
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2012
    Messages : 3 740
    Points : 7 586
    Points
    7 586
    Billets dans le blog
    17

    Par défaut

    Citation Envoyé par electroremy Voir le message
    Bonsoir,


    Et ca marche avec VB2010
    En fait, cela dépend de la version du Framework. C'est à partir de 3.5, il me semble.

    Question à 3000$ : est-il possible d'ajouter également une propriété ou une variable à une classe existante ? Cette possibilité serait très utile notamment lorsqu'on doit utiliser une DLL mais que les structures de données de la DLL ne suffisent pas (typiquement, une classe dans laquelle on aimerait juste ajouter une variable ou un drapeau)

    A bientôt
    Je ne suis pas prêt à le jurer, mais tu peux ajouter des méthodes qui appellent des méthodes d'extension, mais les méthodes d'extension doivent être dans le module d'extensions, du moins en VB.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    À force de vouloir considérer les utilisateurs comme des imbéciles patentés, on risque de se mettre dans le trouble.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : avril 2007
    Messages : 12 738
    Points : 22 885
    Points
    22 885

    Par défaut

    Citation Envoyé par J@ckHerror Voir le message
    Le seul inconvénient que je leur voient c'est qu'il faut forcément faire un imports du module pour que les méthodes soient accessibles dans la page de code
    je viens de passer sur c# depuis peu et je ne me rappelle pas avoir déjà fais des using/imports en vb.net pour avoir accès aux méthodes d'extensions
    c# n'est pas très orienté user friendly, car ca me parait logique de les afficher sans using vu que c'est fait pour étendre une classe (comme les méthodes d'origine)
    mais bon du coup sur c# je les mets dans le namespace system ^^


    Citation Envoyé par electroremy Voir le message
    est-il possible d'ajouter également une propriété ou une variable à une classe existante ? Cette possibilité serait très utile notamment lorsqu'on doit utiliser une DLL mais que les structures de données de la DLL ne suffisent pas (typiquement, une classe dans laquelle on aimerait juste ajouter une variable ou un drapeau)
    non
    par contre sur des classes .net tu peux en hériter et te rajouter ce que tu veux dedans (dont des propriétés/variables), ca se fait bien aussi, même avec des classes du framework
    les méthodes d'extensions sont utiles pour des classes non hératibales (notinheritable/sealed) ou dont l'instanciation ne dépend pas de toi


    Citation Envoyé par clementmarcotte Voir le message
    En fait, cela dépend de la version du Framework. C'est à partir de 3.5, il me semble.
    c'est bien arrivé sur vs2008 (fx3.5) en même temps que linq ; toutes (information non contractuelle) les méthodes de linq sont des méthodes d'extension
    (ca permet de ne pas modifier une classe ou une dll et de rajouter du code quand même)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appeller une fonction avec un lien
    Par SonnyFab dans le forum ASP.NET
    Réponses: 21
    Dernier message: 10/07/2010, 15h29
  2. [AC-2003] Comment appeler une fonction avec deux paramètres. Erreur '=' attendu
    Par nirG95 dans le forum VBA Access
    Réponses: 1
    Dernier message: 02/09/2009, 10h53
  3. Appeler une fonction avec un tableau en parametre ?
    Par devoluti0n dans le forum C++
    Réponses: 9
    Dernier message: 11/04/2008, 16h21
  4. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 14h54
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Général Algorithmique
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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