vb.net中的委托与事件
来源:互联网 发布:常用java项目技术 编辑:程序博客网 时间:2024/05/16 23:37
委托是CTS(公共类型系统)规定的5种类型之一(类类型、结构类型、接口类型、枚举类型、委托类型)它是一种类型可以用来调用其他对象的方法,也称为函数指针。其实在vb.net中委托也可以当做是可以用来共享其他对象的方法的对象。当程序必须通过调用一个方法来执行某个操作(调用某个方法),但在编译时不知道该方法是什么时,就可以使用委托。委托允许在程序运行时指定调用的方法,委托的特点是面向对象的,类型是安全的。
委托的使用:
首先创建一个委托:delegate {sub|function} DelegateType(参数1,参数2) 由于委托是一种类型所以在创建一个委托之后就是将它声明并实例化,第二步就是声明实例化委托并与对应方法绑定dim a as delegateType(Delegate sub),声明委托时注意它的参数类型与数量要跟创建的保持一致。第三就是用委托间接调用被委托的方法
例:
Public Class Form1Delegate Sub fr(ByVal str As String) '创建一个委托Dim a As New fr(AddressOf talk) '声明实例化委托并绑定被委托的方法:talk Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load a.Invoke("hello")'运行指定的委托即间接调用talk方法 End SubPublic Sub talk(ByVal str As String) MsgBox(str) End SubEnd Class
委托在vb.net中的另一种形式:事件
有了委托就可以透过方法来调用指定方法,这种指定不是编译时指定的而是在程序运行时指定,所以在面向对象程序设计中委托的出现可以说降低了类与类之间的耦合关系也就是实现了解耦。委托在面向对象程序中的最好应用就是事件。在vb.net中事件可以看成为一种特殊的委托,所以就可以将一些sub或function委托给事件,当某一方法触发事件时就会执行委托给该事件的sub或function。
vb.net中自定义事件:
Public Class Test1'自定义类 Public Event speak(ByVal str As String) '自定义事件speak Public Sub Te(ByVal str As String) '定义触发事件函数 RaiseEvent speak(str) '触发事件 End SubEnd Class
Public Event speak(ByVal str As String)
等效于
Delegate Sub fr(ByVal str As String)Public Event speak As fr
声明事件对象并将sub或function委托给事件:
方法一:
Module Module1 Public WithEvents tea As New Test1() '声明事件对象 Public Sub talk(ByVal str As String) Handles tea.speak '将talk委托给Test类中speak事件 Console.WriteLine(str) End Sub Sub Main() tea.Te("hello") '执行Test1中触发speak事件的方法 End SubEnd Module
方法二:
Module Module1 Public tea As New Test1() '声明事件对象 Public Sub talk(ByVal str As String) Console.WriteLine(str) End Sub Sub Main() AddHandler tea.speak, AddressOf talk '将talk方法委托给Test1类的speak事件 tea.Te("hello") '执行Test1中触发speak事件的方法 End SubEnd Module
- vb.net中的委托与事件
- VB.NET中的事件与委托(警察抓小偷)
- .Net中的事件与委托
- Net中的事件与委托
- net中的事件与委托
- .Net中的事件与委托
- .NET 中的事件与委托
- VB.NET中的委托
- 关于.net中的委托与事件
- .Net Framework中的委托与事件
- .Net Framework中的委托与事件
- .Net事件与委托
- .NET 委托与事件
- VB.NET下的事件和委托
- VB.NET下的事件和委托
- VB.NET下的事件和委托
- VB.NET下的事件和委托
- VB.NET下的事件和委托
- java null和“空值或者空格”是有区别的
- 错误failed to load session ubuntu的解决办法
- 火车票提前20天预售 2013最强春运火车票预定日历
- 最近一直在学JS方面的知识,想要把自己所学与大家分享
- 面试中常见的链表题目
- vb.net中的委托与事件
- 考研的利弊分析:什么人和专业适合考研?
- java 多线程 Thread和Runnable的区别
- linux vi
- 每日雕蟲一技[2013-01-10][内嵌JS改动之后]
- 使用spring的动态路由实现数据库读写分离【数据库读写分离(二) 】 .
- IE6 IE7 IE8 FF兼容 高度
- 解决报错问题方法
- MAC下安装与配置MySQL