事件提供者和订阅者正确的使用方式

时间:2015-02-09 20:39:30

标签: vb.net

三个问题:

  1. 这种使用事件的方式是否正确?
  2. 我无法理解使用WithEvents我在一些例子中看到人们正在使用它可以根据我的例子或者何时使用它来解释。
  3. 是否可以不创建此案例:

    Dim Subscrib1 As New Policeman(carStart)

  4. 我的意思是我想要有一个我不需要创建实例的课程,例如让我们参加警察课程,我是否真的需要创建他的实例并将carStart传递给它以接收事件?例如,让我们想象警察类包含方法Do和在Console.writeline内部(" doSomething")。我希望在引发somwhere carStart.Drive时执行此方法。

    Module Module1
    
        Sub Main()
    
            Dim carStart As New Driver(122)
            Dim Subscrib1 As New Passenger(carStart)
            Dim Subscrib2 As New PoliceControl(carStart)
    
            carStart.StartToDrive()
            carStart.CheckCurrentSpeed()
    
            Console.ReadLine()
        End Sub
    
        Class Driver
            Public Delegate Sub DoIt()
            Public Event Drive As DoIt
            Public Event CurrentSpeed()
    
            Public SpeedDrive As Integer
    
            Public Sub New(ByVal speed As Integer)
                Me.SpeedDrive = speed
            End Sub
    
            Public Sub StartToDrive()
                Console.WriteLine("I am driving")
                RaiseEvent Drive()
            End Sub
    
            Public Sub CheckCurrentSpeed()
                Console.WriteLine("Current speed is " & SpeedDrive)
                RaiseEvent CurrentSpeed()
            End Sub
    
        End Class
    
        Class Passenger
            Sub New(classWithevent As Driver)
                If classWithevent.SpeedDrive = 0 Then
                    AddHandler classWithevent.Drive, AddressOf TakePassanger
                Else
                    RemoveHandler classWithevent.Drive, AddressOf TakePassanger
                End If
            End Sub
    
            Public Sub TakePassanger()
                Console.WriteLine("Taking passenger")
            End Sub
        End Class
    
        Class PoliceControl
            Sub New(classWithevent As Driver)
                If classWithevent.SpeedDrive > 120 Then
                    AddHandler classWithevent.CurrentSpeed, AddressOf PolicemanCheckTheCarSpeed
                Else
                    RemoveHandler classWithevent.CurrentSpeed, AddressOf PolicemanCheckTheCarSpeed
                End If
            End Sub
    
            Public Sub PolicemanCheckTheCarSpeed()
                Console.WriteLine("Stop for control")
            End Sub
        End Class
    
    End Module
    

0 个答案:

没有答案