Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0022: Aus der Oberklasse ein Ereignis auslösen

 von 

Beschreibung

Dieses Beispiel zeigt, wie man von einer Unterklasse aus ein in einer Oberklasse definiertes Ereignis auslösen kann.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Framework-Version(en):

.NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5

.NET-Version(en):

Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008

Download:

Download des Beispielprojektes [2,76 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2002/2003
' Option Strict:    An
' Option Explicit:  An
'
' Referenzen: 
'  - System
'

' ##############################################################################
' ################################## Car.vb ####################################
' ##############################################################################
Option Explicit On 
Option Strict On
Option Compare Binary

' <remarks>
'   Stellt ein Auto dar.
' </remarks>
Public Class Car

    ' <summary>
    '   Ereignis, das eintritt, wenn das Auto 
    '   einen Crash verursacht.
    ' </summary>
    ' <param name="sender">Objekt, das den Crash auslöst.</param>
    ' <param name="e">Informationen, die mit dem 
    '   Crash verknüpft sind.</param>
    Public Event Crash( _
      ByVal sender As Object, _
      ByVal e As CrashEventArgs)

    ' <summary>
    '   Mache mit dem Auto einen Unfall mit 
    '   gleich starkem "Gegner".
    ' </summary>
    Public Sub MakeCrashWithOtherCar()
        Dim e As New CrashEventArgs()
        e.PercentDamage = 50
        RaiseEvent Crash(Me, e)
    End Sub

    ' <summary>
    '   Löst das Ereignis <c>Crash</c> mit den 
    '   in den Parametern angebenenen Werten aus.
    ' </summary>
    ' <param name="sender">Objekt, das den Crash auslöst.</param>
    ' <param name="e">Informationen, die mit 
    '   dem Crash verknüpft sind.</param>
    Public Sub OnCrash( _
      ByVal sender As Object, _
      ByVal e As CrashEventArgs)
        RaiseEvent Crash(sender, e)
    End Sub
End Class
' ##############################################################################
' ############################# CrashEventArgs.vb ##############################
' ##############################################################################
Option Explicit On 
Option Strict On
Option Compare Binary

Imports System

' <remarks>
'   Stellt Informationen zu einem 
'   Crash zur Verfügung.
' </remarks>
Public Class CrashEventArgs
    Inherits EventArgs

    ' Wert n, 0 <= n <= 100.
    Private m_intPercentDamage As Integer

    ' <summary>
    '   Erstellt eine neue Instanz der Klasse.
    ' </summary>
    Public Sub New()
        Me.PercentDamage = 0
    End Sub

    ' <summary>
    '   Gibt den Schaden in Prozent an oder 
    '   gibt ihn zurück.
    ' </summary>
    ' <value>Schaden in Prozent.</value>
    Public Property PercentDamage() As Integer
        Get
            Return m_intPercentDamage
        End Get
        Set(ByVal Value As Integer)
            m_intPercentDamage = Value
        End Set
    End Property
End Class
' ##############################################################################
' ################################## Main.vb ###################################
' ##############################################################################
Option Explicit On 
Option Strict On
Option Compare Binary

Imports System

' <remarks>
'   Stellt den Einsprungspunkt 
'   der Anwendung bereit.
' </remarks>
Public Class Main

    ' <summary>
    '   Der Einsprungspunkt der Anwendung.
    ' </summary>
    Public Shared Sub Main()
        Dim carBentley As New Car()
        AddHandler carBentley.Crash, AddressOf CrashHandler
        carBentley.MakeCrashWithOtherCar()
        RemoveHandler carBentley.Crash, AddressOf CrashHandler
        Dim truckMac As New Truck()
        AddHandler truckMac.Crash, AddressOf CrashHandler
        truckMac.MakeFullCrash()
        RemoveHandler truckMac.Crash, AddressOf CrashHandler
    End Sub

    Private Shared Sub CrashHandler( _
      ByVal sender As Object, _
      ByVal e As CrashEventArgs)
        Console.WriteLine("Ein Auto des Typs {0} hat " & _
          " {1} Prozent Schaden.", _
          sender.GetType().Name, _
          e.PercentDamage)
    End Sub
End Class
' ##############################################################################
' ################################# Truck.vb ###################################
' ##############################################################################
Option Explicit On 
Option Strict On
Option Compare Binary

' <remarks>
'   Stellt einen Lastwagen dar.
' </remarks>
Public Class Truck
    Inherits Car

    ' <summary>
    '   Bewirkt einen Totalschaden.
    ' </summary>
    Public Sub MakeFullCrash()
        Dim e As New CrashEventArgs()
        e.PercentDamage = 100

        ' Kompilierungsfehler: Abgeleitete 
        ' Klassen können keine Basisklassenereignisse
        ' auslösen.
        MyBase.OnCrash(Me, e)
    End Sub
End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.