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 :

Déclarer et appeler une fonction avec "."


Sujet :

VB.NET

  1. #1
    Membre éprouvé Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 934
    Points : 1 274
    Points
    1 274
    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
    Quand deux personnes échangent un euro, chacun repart avec un euro.
    Quand deux personnes échangent une idée, chacun repart avec deux idées.

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    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 éprouvé Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 934
    Points : 1 274
    Points
    1 274
    Par défaut
    OK

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

    A bientôt
    Quand deux personnes échangent un euro, chacun repart avec un euro.
    Quand deux personnes échangent une idée, chacun repart avec deux idées.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    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 éprouvé Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 934
    Points : 1 274
    Points
    1 274
    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
    Quand deux personnes échangent un euro, chacun repart avec un euro.
    Quand deux personnes échangent une idée, chacun repart avec deux idées.

  6. #6
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    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
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    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.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    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
    14 154
    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 154
    Points : 25 072
    Points
    25 072
    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 Algorithmes et structures de données
    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