016委托给类的共享方法

        委托可用于调用其他对象方法的对象,它的功能和C函数指针类似,可以通过一个到过程本身的指针对过程进行调用。委托与其他编程语言中所使用的函数指针相似,因此有时也称为“类型安全的函数指针”。但与函数指针不同的是,Visual Basic委托是基于System.Delegate类的引用类型。委托可以引用共享方法(无需类的特定实例便可调用的方法)和实例方法。
        委托的声明与过程的声明类似。例如:

Delegate Sub SimpleDelegate(ByVal msg As String)

   这个语句在Visual Basic在后台创建了一个名为SimpleDelegate的新类,该类是从System.Delegate类继承而来的。一旦定义了SimpleDelegate委托类,就可以为该委托类声明一个变量:

Dim deleg As SimpleDelegate

 接下来创建一个SimpleDelegate委托类的实例对象:

Deleg=New SimpleDelegate(Addressof DisplayMsg)

 

其中,DisplayMsg是一个过程,其参数列表和SimpleDelegate委托相同:

Sub DisplayMsg(ByVal msg As String)
    Console.WriteLine(msg)
End Sub

    现在可以通过使用deleg变量的Invoke方法调用DisplayMsg过程,SimpleDelegate类从System.Delegate类继承了该方法。例如:

  deleg.lnvoke("Hello")

    在程序中使用委托,大大提高了程序的灵活性。例如,在程序中有一个遵循SimpleDelegate语法的过程:

Sub PopuMsg(ByVal msg As String)
     MsgBox(msg)
End Sub

现在就可以使用SimpleDelegate委托调用过程PopupMsg:

deleg=New SimpleDelegate(Addressof PopupMsg)
deleg.lnvoke("Hello")

    在上面的程序中,为了找到特定方法的地址,使用AddressOf运算符。这个运算符可以返回任何过程和方法的地址。实际上,通常可以直接将AddressOf的结果赋值到一个Delegate变量,而无需显式地创建一个相应类型的Delegate对象: 

 deleg= Addressof PopupMsg
Module Module1
    '1.声明委托
    Delegate Function SimpleDelegate(ByVal x As Integer, ByVal y As Integer) As Integer
    Public Class Compare
        '3.被委托的函数与委托签名相同,即参数相同
        Shared Function Max(ByVal a As Integer, ByVal b As Integer) As Integer
            Dim Result As Integer
            If a > b Then
                Result = a
            Else
                Result = b
            End If
            Return Result
        End Function
    End Class

    Sub Main()
        '2.声明委托变量
        Dim deleg As SimpleDelegate
        '4.创建委托实例
        deleg = AddressOf Compare.Max

        Dim a, b, c As Integer
        Console.WriteLine("输入一个数")
        a = Console.ReadLine
        Console.WriteLine("输入第二个数")
        b = Console.ReadLine
        '5.调用委托
        c = deleg.Invoke(a, b)
        Console.WriteLine("两个数中较大的数是:" & c)

        Console.Read()
    End Sub

End Module

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ngbshzhn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值