Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 事件提供程序和订阅服务器的正确使用方式_Vb.net - Fatal编程技术网

Vb.net 事件提供程序和订阅服务器的正确使用方式

Vb.net 事件提供程序和订阅服务器的正确使用方式,vb.net,Vb.net,三个问题: 这种使用事件的方式是否正确 我不知道如何使用我在一些例子中看到的事件,人们正在使用它。你能根据我的例子解释一下,或者什么时候应该使用它吗 是否可以不创建此案例: Dim Subscrib1担任新警察(carStart) 我的意思是我想要一个我不需要创建实例的类,例如,让我们以警察类为例,我真的需要创建他的实例并将carStart传递给它来接收事件吗?例如,让我们设想警察类包含方法Do和Console.writeline(“doSomething”)内部。我希望在引发carStart.

三个问题:

  • 这种使用事件的方式是否正确
  • 我不知道如何使用我在一些例子中看到的事件,人们正在使用它。你能根据我的例子解释一下,或者什么时候应该使用它吗
  • 是否可以不创建此案例:

    Dim Subscrib1担任新警察(carStart)

  • 我的意思是我想要一个我不需要创建实例的类,例如,让我们以警察类为例,我真的需要创建他的实例并将carStart传递给它来接收事件吗?例如,让我们设想警察类包含方法Do和Console.writeline(“doSomething”)内部。我希望在引发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
    

    有什么反馈吗?