none
Passer une fonction en paramètre RRS feed

  • Question

  • Bonjour,

    Sous VS 2015 Community, en VB.Net, est-il possible de passer une fonction en paramètre à une autre fonction ?

    Par exemple, je souhaite que la fonction appelée s'exécute tant qu'une condition (plusieurs conditions possibles) est réalisée.

    Ces conditions sont définies par des fonctions ou propriétés extérieures à la fonction appelée.

    Merci de vos réponses.

    Cordialement


    Alain

    dimanche 25 septembre 2016 08:51

Réponses

  • Bonjour Alain,

    Vous pouvez utiliser les délégués pour passer une fonction en paramètre d'une autre fonction (qui respecte une signature donnée).

    L'opérateur AddressOf utilise ce principe de delegate :

    Sub Foo()
        Console.WriteLine("Foo!")
    End Sub
    
    Sub Bar()
        Console.WriteLine("Bar!")
    End Sub
    
    Sub AFunction(f As Action)
        f()
    End Sub
    
    [... du code ...]
    
    AFunction(AddressOf Foo)
    AFunction(AddressOf Bar)

    Dans la fonction AFunction, nous attendons un paramètre de type Action qui est simplement un délégué correspondant à une signature de méthode de type :

    Public Delegate Sub Action

    Donc une fonction ne prenant pas de paramètre et ne retournant pas de valeur spéciale, dans l'exemple ci-dessus, Foo et Bar respectent cette signature. Pour plus de détails : Action [MSDN].

    Pour une fonction devant renvoyer une valeur, vous pouvez utiliser le délégué Func(Of T).

    Cordialement,

    • Marqué comme réponse AchLog dimanche 25 septembre 2016 12:33
    dimanche 25 septembre 2016 10:11

Toutes les réponses

  • Bonjour Alain,

    Vous pouvez utiliser les délégués pour passer une fonction en paramètre d'une autre fonction (qui respecte une signature donnée).

    L'opérateur AddressOf utilise ce principe de delegate :

    Sub Foo()
        Console.WriteLine("Foo!")
    End Sub
    
    Sub Bar()
        Console.WriteLine("Bar!")
    End Sub
    
    Sub AFunction(f As Action)
        f()
    End Sub
    
    [... du code ...]
    
    AFunction(AddressOf Foo)
    AFunction(AddressOf Bar)

    Dans la fonction AFunction, nous attendons un paramètre de type Action qui est simplement un délégué correspondant à une signature de méthode de type :

    Public Delegate Sub Action

    Donc une fonction ne prenant pas de paramètre et ne retournant pas de valeur spéciale, dans l'exemple ci-dessus, Foo et Bar respectent cette signature. Pour plus de détails : Action [MSDN].

    Pour une fonction devant renvoyer une valeur, vous pouvez utiliser le délégué Func(Of T).

    Cordialement,

    • Marqué comme réponse AchLog dimanche 25 septembre 2016 12:33
    dimanche 25 septembre 2016 10:11
  • Ah, très bien.

    Merci Arthur

    Cordialement


    Alain

    dimanche 25 septembre 2016 12:32