zoukankan      html  css  js  c++  java
  • 委托

    Public Class Form1

        '定义委托
        Private Delegate Sub MyMsg(ByVal str As String)

        '实现委托,方法签名与前面定义的委托相同
        Private Sub showmsg(ByVal str As String)
            MessageBox.Show(str & " from showmsg")
        End Sub

        '实现另一个委托,,方法签名与前面定义的委托相同
        Private Sub shownamemsg(ByVal str As String)
            MessageBox.Show(str & ",Phoenix" & " from shownamemsg")
        End Sub

       '使用委托, 把调用哪个方法的权利下放到执行代码那里
        Private Sub showinfo(ByVal dd As MyMsg, ByVal str As String)
            dd(str)
            '在vb中支持调用invoke
            'dd.Invoke(str)
        End Sub

        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            '采用了简写形式. 完整形式应该是
            'showinfo(New MyMsg(AddressOf showmsg), "Hello")
            showinfo(AddressOf showmsg, "Hello")

       

         '采用了简写形式.完整形式应该是
            'showinfo(New MyMsg(AddressOf shownamemsg), "Hello")
            showinfo(AddressOf shownamemsg, "Hello")

           '委托链表. 依次调用委托链上的每个方法. 注意此处不能采用简写形式
            '以下为错误写法
            'showinfo([Delegate].Combine(AddressOf showmsg, AddressOf shownamemsg), "Hello")
            showinfo([Delegate].Combine(New MyMsg(AddressOf showmsg), New MyMsg(AddressOf shownamemsg)), "Hello")

       

         '用lambda函数代替委托
            showinfo(Sub(str) MessageBox.Show(str & " from lambda"), "Hello")

        End Sub


    End Class

  • 相关阅读:
    封装 lhgDialog弹出窗口组件 为C#的api
    最简单的dbhelper类
    asp.net无组件导出Excel
    js中的escape的用法汇总
    【Demo 0110】获取内存信息
    【Demo 0119】延时加载DLL 编程
    【Demo 0112】共享数据段
    【Demo 0116】堆的使用
    【Demo 0111】获取进程当前内存使用
    【Demo 0118】动态加载DLL
  • 原文地址:https://www.cnblogs.com/hzb2001/p/2093835.html
Copyright © 2011-2022 走看看