RaiseEvent feuert nicht / Konsolenanwendung

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

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

    RaiseEvent feuert nicht / Konsolenanwendung

    Hi!
    Kann mir jemand sagen wieso das Event nicht feuert?!?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Console
    2. Public Interface IGeo
    3. Function Flaeche() As Single
    4. Function Umfang() As Single
    5. End Interface
    6. Public Class Kreis
    7. Implements IGeo
    8. Private m_radius As Single
    9. Private m_durchmesser As Single
    10. Public Event Fehler_CreateNew(sender As Kreis, Fehlermeldung As String)
    11. Public Sub New(Radius As Single)
    12. If Radius > 0 Then
    13. m_radius = Radius
    14. m_durchmesser = Radius * 2
    15. Else
    16. RaiseEvent Fehler_CreateNew(Me, "Ungültiger Wert für ""Radius"".")
    17. End If
    18. End Sub
    19. Public ReadOnly Property Radius() As Single
    20. Get
    21. Radius = m_radius
    22. End Get
    23. End Property
    24. Public Function Durchmesser() As Single
    25. Durchmesser = m_durchmesser
    26. End Function
    27. Public Function Flaeche() As Single Implements IGeo.Flaeche
    28. Flaeche = m_radius * m_radius * Math.PI
    29. End Function
    30. Public Function Umfang() As Single Implements IGeo.Umfang
    31. Umfang = 2 * m_radius * Math.PI
    32. End Function
    33. End Class
    34. Public Class Test
    35. Private Shared WithEvents k As Kreis
    36. Shared Sub Main()
    37. Dim g As IGeo
    38. k = New Kreis(-3.0)
    39. g = k
    40. WriteLine("Der Kreis hat die Fläche: {0}", g.Flaeche)
    41. WriteLine("Der Kreis hat den Umfang: {0}", g.Umfang)
    42. WriteLine()
    43. ReadLine()
    44. End Sub
    45. Private Shared Sub Fehlermeldung(sender As IGeo, Fehlermeldung As String) Handles k.Fehler_CreateNew
    46. WriteLine(Fehlermeldung)
    47. End Sub
    48. End Class
    Weil es keinen Zuhörer gibt. Das Event wird für eine neue Kreis-Instanz gefeuert. Aber diese ist mit k noch nicht identisch. Und da nur das Event gehört wird, wenn es von k gefeuert wird, geht der Ruf des neuen Objektes ungehört verloren.
    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.
    Hach, Mist..ja, stimmt..Danke!

    Hab´s dann jetzt so gemacht:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Console
    2. Public Interface IGeo
    3. Function Flaeche() As Single
    4. Function Umfang() As Single
    5. End Interface
    6. Public Class Kreis
    7. Implements IGeo
    8. Private m_radius As Single
    9. Private m_durchmesser As Single
    10. Public Sub New(Radius As Single, ByRef CreationError As Boolean)
    11. If Radius > 0 Then
    12. m_radius = Radius
    13. m_durchmesser = Radius * 2
    14. CreationError = False
    15. Else
    16. CreationError = True
    17. WriteLine("Ungültiger Wert für ""Radius"".")
    18. End If
    19. End Sub
    20. Public ReadOnly Property Radius() As Single
    21. Get
    22. Radius = m_radius
    23. End Get
    24. End Property
    25. Public Function Durchmesser() As Single
    26. Durchmesser = m_durchmesser
    27. End Function
    28. Public Function Flaeche() As Single Implements IGeo.Flaeche
    29. Flaeche = m_radius * m_radius * Math.PI
    30. End Function
    31. Public Function Umfang() As Single Implements IGeo.Umfang
    32. Umfang = 2 * m_radius * Math.PI
    33. End Function
    34. End Class
    35. Public Class Test
    36. Private Shared k As Kreis
    37. Shared Sub Main()
    38. Dim g As IGeo
    39. Dim CreationFail As Boolean = False
    40. k = New Kreis(-3.0, CreationFail)
    41. If CreationFail = True Then
    42. k = Nothing
    43. End If
    44. If Not IsNothing(k) Then
    45. g = k
    46. WriteLine("Der Kreis hat die Fläche: {0}", g.Flaeche)
    47. WriteLine("Der Kreis hat den Umfang: {0}", g.Umfang)
    48. WriteLine()
    49. End If
    50. ReadLine()
    51. End Sub
    52. End Class

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