Gleiches Event bei mehreren Klassen

  • VB.NET

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

    Gleiches Event bei mehreren Klassen

    Hi,

    mal eine Frage: ich habe z.B. 2 Klassen und möchte, dass von beiden die Arbeit "mitgeloggt" wird, also hier mal was simples:

    VB.NET-Quellcode

    1. Class Form1
    2. Dim WithEvents a As New ClassA
    3. Sub Form1_Load(...) Handles Me.Load
    4. a.Work()
    5. End Sub
    6. Sub Log(text As String) Handles a.Log
    7. MsgBox(text)
    8. End Sub
    9. End Class
    10. Class ClassA
    11. Dim WithEvents b As New ClassB
    12. Event Log(text As String)
    13. Sub Work()
    14. RaiseEvent Log("a")
    15. b.Work()
    16. End Sub
    17. Sub b_Log(text As String) Handles b.Log
    18. RaiseEvent Log(text)
    19. End Sub
    20. End Class
    21. Class ClassB
    22. Event Log(text As String)
    23. Sub Work()
    24. For i As Integer = 1 to 3
    25. RaiseEvent Log(i)
    26. Thread.Sleep(1000)
    27. Next
    28. End Sub
    29. End Class


    Geht es auch irgendwie anders, dass ich die Arbeit, die in ClassB durchgeführt mitloggen kann, ohne nochmal das selbe Event zu erstellen und quasi auf eine "Weiterleitung" zum Log-Event von ClassA zu verzichten? Weiß grad nicht, wie ich das genau erklären soll, aber ich hoffe man kann am Code erkennen was ich meine.

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

    Wie wäre es, wenn Du Dir eine eigene LogClass erstellst. ClassA und ClassB binden diesen Logger dann ein.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents _log As New LogClass
    3. Private _classA As New ClassA(_log)
    4. Private _classB As New ClassB(_log)
    5. Private Sub _log_Loging(s As String) Handles _log.Loging
    6. MessageBox.Show(s)
    7. End Sub
    8. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    9. _classA.DoWork()
    10. End Sub
    11. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    12. _classB.DoWork()
    13. End Sub
    14. End Class


    VB.NET-Quellcode

    1. Public Class ClassA
    2. Private _logger As LogClass
    3. Public Sub New(ByVal logger As LogClass)
    4. _logger = logger
    5. End Sub
    6. Public Sub DoWork()
    7. _logger.Log("test")
    8. End Sub
    9. End Class


    VB.NET-Quellcode

    1. Public Class ClassB
    2. Private _logger As LogClass
    3. Public Sub New(ByVal logger As LogClass)
    4. _logger = logger
    5. End Sub
    6. Public Sub DoWork()
    7. _logger.Log(CStr(3))
    8. End Sub
    9. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Leize sie z.B. von einer gemeinsamen Basisklasse ab, in der Du dies behandelst.
    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!