Funktion als Parameter an eine Funktion übergeben

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von siycah.

    Funktion als Parameter an eine Funktion übergeben

    Moin!

    ich habe da einmal wieder so eine Idee.

    Es gibt Funktionen, die einen SQL-Ausdruck generieren.

    VB.NET-Quellcode

    1. _fMitarbeiter.GetSQLOfMembers_PLAN(CurrentValue:=ID_Zuständig)
    2. _fMitarbeiter.GetSQLOfMembers_BDF(CurrentValue:=ID_Zuständig)
    3. ...
    4. _fMitarbeiter.GetSQLOfMembers_BDF(CurrentValue:=ID_Zuständig)


    Nun möchte ich eine Funktion für viele Aufgaben erstellen, aber der zu verarbeitende SQL-Ausdruck darin ist durch die zuvor beschriebenen SQL-Funktionen definiert.

    Nun möchte ich die GetSQLOfMembers_xxx-Funktionen gerne als Parameter übergeben.

    Geht das und wenn wie?

    Nun könnte man meinen, dass man ja den fertigen SQL-Ausdrück übergeben könnte - ist aber nicht ganz möglich, weil ID_Zuständig erst in der Funktion ermittelt wird.

    Gruß Jan
    Welchen Vorteil erhoffst du dir, eine Methode als Parameter zu übergeben?

    Ich sehe bei dir überhaupt nicht einen Einsatzzweck dafür, außer du möchtest filtern - dafür kannste aber genau so gut (und besser) LINQ nutzen.

    Geht aber, auch ohne dass du den genauen Datentyp weißt, solange du mit Generics umgehen kannst:

    C#-Quellcode

    1. using System;
    2. namespace VbParadise {
    3. public delegate void Foo<in T>(T fooFoo);
    4. static class Program {
    5. public static void Main(string[] args) {
    6. void PrintString(string text) {
    7. Console.WriteLine(text);
    8. }
    9. FooCaller(PrintString, "Hello, VBP!");
    10. }
    11. public static void FooCaller<T>(Foo<T> action, T bar) {
    12. action(bar);
    13. }
    14. }
    15. }


    Müsste irgendwie so in VB aussehen:

    VB.NET-Quellcode

    1. Imports System
    2. Namespace VbParadise
    3. Public Delegate Sub Foo(Of In T)(fooFoo As T)
    4. Module Program
    5. Sub PrintString(text As String)
    6. Console.WriteLine(text)
    7. End Sub
    8. Sub Main(args As String())
    9. FooCaller(AddressOf PrintString, "Hello, VBP!")
    10. End Sub
    11. Public Sub FooCaller(Of T)(action As Foo(Of T), bar As T)
    12. action(bar)
    13. End Sub
    14. End Module
    15. End Namespace


    Gibt dann folgendes aus:

    Quellcode

    1. ➜ ./bin/Debug/net8.0/vb
    2. Hello, VBP!

    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.