Was ist das für ein Aufbau?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Was ist das für ein Aufbau?

    Hallo, könnte mir bitte jemand kurz erläutern, was hier geschieht?
    1.) Ich komme nicht damit zurecht, was System.Func ist. Laut Erklärungsfenster ein Delegate Function System.Func(Of in T1, in T2, Out TResult) As TResult
    :(
    1.1) Und dann auch noch ein = Zeichen, mit dem Private Function Func(C As Double, D As Double) As Func(Of Double, Double, String) verknüpft wird..
    1.2) welche wiederum eine Function in sich hat
    Return Function(X1 As Double, X2 As Double) As String
    2.) Ich denke, IProgress habe ich verstanden. Wird halt automatisch vom System ausgeführt.

    VB.NET-Quellcode

    1. Imports Microsoft.VisualBasic.ControlChars
    2. Public Class FormMain
    3. Private Const DeltaT As Double = 0.4
    4. Private SimulationTime As Double = 0.0
    5. Private DelegateFunction_ As Func(Of Double, Double, String) = Func(0.0, 1.0)
    6. Private Sub ButtonStart_Click(sender As Object, e As EventArgs) Handles ButtonStart.Click
    7. Timer1.Start()
    8. End Sub
    9. Private Sub ButtonStop_Click(sender As Object, e As EventArgs) Handles ButtonStop.Click
    10. Timer1.Stop()
    11. End Sub
    12. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    13. UpdateStatus.Report(DelegateFunction_(SimulationTime, 3.0))
    14. SimulationTime += DeltaT
    15. End Sub
    16. Private Function Func(C As Double, D As Double) As Func(Of Double, Double, String)
    17. Dim A As Double = C
    18. Dim B As Double = D
    19. Return Function(X1 As Double, X2 As Double) As String
    20. Return $"{A:F3} {B:F5}"
    21. End Function
    22. End Function
    23. Private UpdateStatus As IProgress(Of String) = New Progress(Of String)(
    24. Sub(ReportMessage As String)
    25. Dim UpdatedText As String = TextBox1.Text.Trim()
    26. If String.IsNullOrEmpty(UpdatedText) Then
    27. UpdatedText = ReportMessage
    28. Else
    29. UpdatedText += NewLine & ReportMessage
    30. End If
    31. TextBox1.Text = UpdatedText
    32. TextBox1.SelectionStart = TextBox1.Text.Length
    33. TextBox1.ScrollToCaret()
    34. End Sub)
    35. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bartosz“ ()

    Delegaten von Funktionen, die Funktionen zurückgeben (in diesem Sinne Func als Gegensatz zu Sub), wo der Return-Type dem letzten Parameter entspricht.
    Schwer lesbar, im Ernstfall missverständlich.
    Auch wenn man damit einige Sachen elegant und kurz schreiben kann, verwende ich solche Konstrukte nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    ErfinderDesRades schrieb:

    Das ist vor allem Option Strict Off
    ?( An welcher Stelle?
    Das Teil gut zu benennen ist m.E. schwierig. Aber natürlich kein guter Grund für Func. Mein erster Gedanke: GetFunctionToGetFormattedTextFrom. Und für DelegateFunction: GetFormattedTextFrom
    Dann hat man im Code:
    Private GetFormattedTextFrom As Func(Of Double, Double, String) = GetFunctionToGetFormattedTextFrom(0.0, 1.0)
    und
    UpdateStatus.Report(GetFormattedTextFrom(SimulationTime, 3.0))
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.