VB.NET学习笔记:初识委托——System.Delegate 类

这篇博客介绍了VB.NET中的委托,通过实例展示了如何使用System.Delegate类来实现方法作为参数传递,从而实现动态调用。文章讨论了委托的基本概念,强调其在传统方法调用上的优势,如提高代码的扩展性和动态性。此外,还详细解释了声明、实例化、调用委托的步骤,并提到了调用含参数过程和多个方法的情况。
摘要由CSDN通过智能技术生成

测试环境:windows 7和Microsoft Visual Studio 2015

想必你对生活中的“委托”耳闻能详,如委托某人办某事。没想到VB.NET编程也要跟委托打交道。因扩展控件,使其列头增加全选全不选复选框并具备分页功能需要用到委托和事件,详见博文《VB.NET学习笔记:WinForm自定义DataGridView分页组合控件》、《VB.NET学习笔记:自定义控件之扩展DataGridViewColumnHeaderCell类增加CheckBox全选复选框》,所以拜读了多篇相关委托与事件的博文,结合自己在编程中的使用情况,谈谈我对委托的一些认识,记录下来做个记号,温习时可以用用。

一、问题暴露:方法能作为参数传给方法吗?

为了优化精简代码,通常会把多次重复的代码写成Sub过程或Function函数,然后再调用该过程或函数,这样要修改代码就不必用到四处修改,只需对修改该Sub过程或Function函数代码即可。来个Call英文版"Hello World",代码示例如下:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Call EnglishHelloWorld()
    End Sub
    Private Sub EnglishHelloWorld()
        MessageBox.Show("Hello World")
    End Sub
End Class

以委托也可以实现过程或函数的调用。代码如下:

Public Class Form1
    Private Delegate Sub HelloWorldDelegate() '创建一个委托
    Dim Dlt As New HelloWorldDelegate(AddressOf EnglishHelloWorld) '声明实例化委托并绑定被委托的方法:EnglishHelloWorld
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dlt.Invoke() '运行指定的委托即间接调用EnglishHelloWorld方法
    End Sub
    Private Sub EnglishHelloWorld()
        MessageBox.Show("Hello World")
    End Sub
End Class

好啰嗦的代码,真是画蛇添足,多此一举,有必要用委托吗?直接调用不是更好?
为了把问题暴露出来,我们把 Form1_Load过程封装到一个类中,从类中调用窗体里提供的Sub过程或Function函数(以下统称方法),实现代码如下:

Public Class HelloWorld
    Public Sub Form1_Load()
        Dim Form As New Form1
        Call Form.EnglishHelloWorld()
    End Sub
End Class

窗体调用代码如下:

Public Class Form1
       Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim Cls As New HelloWorld
        Call Cls.Form1_Load()
    End Sub
    Public Sub EnglishHelloWorld()
        MessageBox.Show("Hello World")
    End Sub
End Class
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值