栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

VB.NET 委托 Delegate Action Func

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

VB.NET 委托 Delegate Action Func

VB.NET 委托 :Delegate、 Action、 Func
  • Delegate
  • Action
  • Func
  • 实例
  • 参考资料
  • 注意点

委托,是CTS(公共类型系统)规定的5种类型之一(类类型、结构类型、接口类型、枚举类型、委托类型)。它能够调用对象的方法(实例方法)和类的方法(静态方法、在VB.NET里的Shared方法)。 实现间接访问某一封装的函数方法,始终明确,委托可被视作类

Delegate

Delegate 是委托的祖宗,Action和Func是VB.NET简化的委托。
委托实现的步骤:
1. 创建委托(相当于创建类)

    Public Delegate Function myact(str As String) As Integer //创建委托 有返回值Function型
    Public Delegate Sub myact2(str As String) //创建委托 无返回值 Sub型

2. 声明委托

    Public myaction As myact
    Public myaction2 As myact2 

3. 委托实例化
将前边声明的委托与即将创建的委托方法相关联
方法①:使用函数地址提取 Addressof 来实例化委托
方法②:用New实例化委托并绑定被委托的方法

myact = AddressOf Mycall //方法①
myact =  New myact(AddressOf Mycall ) //方法②

4. 创建委托调用的方法
以myact为例,初始创建委托类型时,是 Function(str As String) As Integer ,那么委托调用的方式类型也是如此。参数为String,返回值为Integer。

Private Function Mycall(str As String) As String
    TextBox1.Text = str
    Return 123
End Function

5. 委托调用

num = myaction.Invoke("调用成功!")
Action

VB.NET中 Action定义:Public Delegate Function Func(Of In T) ,无返回值
因此Action使用步骤同Delegate,优点在于直接省略了步骤1,不需要再创建委托了,Action本身即是委托,使用时直接声明就可以:

第一步:Public Myaction As Action
第二步:委托实例化
第三步:创建委托调用方法
第四步:调用委托
Func

定义:Public Delegate Function Func(Of In T, Out TResult) As TResult,有返回值
使用方法同Action

实例

本文实例是两个窗口间的通信,MainForm和ChildForm,在Module中声明委托。
功能:MainForm窗口、ChildForm窗口间互相传值

myModule.vb

Module myModule
    '声明委托
    Public myaction As Func(Of String, String)

    '创建委托
    'Public Delegate Function myact(str As String) As Integer
    'Public Delegate Sub myact2(str As String)
    '声明委托
    'Public myaction As myact
    'Public myaction2 As myact2

    Public Mainf As New MainForm
    Sub Main()

        Application.EnableVisualStyles()  '启用xp视觉样式
        Application.Run(Mainf) '加不加()都是调用默认构造函数,最好加
    End Sub
End Module

mainForm.vb

Public Class MainForm
    Dim childF As New ChildForm

    Private Function Mycall(str As String) As String
        TextBox1.Text = str
        Return 123
    End Function

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        childF.Show()
        childF.RSMsg = TextBox1.Text
        myaction = AddressOf Mycall
        'myaction2 = New myact2(AddressOf Mycall)
    End Sub
End Class

childForm.vb

Public Class ChildForm
    Public Property RSMsg() As String
        Get
            Return TextBox1.Text
        End Get
        Set(ByVal Value As String)
            TextBox1.Text = Value
        End Set
    End Property

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim num As Integer
        num = myaction.Invoke(RSMsg)

    End Sub
End Class

运行结果



参考资料

https://blog.csdn.net/zyjq52uys/article/details/85621639
https://blog.csdn.net/dzweather/article/details/51533259
https://blog.csdn.net/m0_53168509/article/details/117883764
https://blog.csdn.net/zyjq52uys/article/details/85621639

注意点

使用Delegate时,创建委托和声明委托应当在同一个文件Module中,这样子ChildForm中才可以调用。即步骤1、2在一起。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/911108.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号