浏览器大全:是一个提供流行浏览器教程、在线学习分享的学习平台!

VB.NET的Override事件处理程序

VB.NET的Override事件处理程序

介绍
在类或控件的继承中,子类或子控件封装了父类的所有函数,其中包括事件处理程序。本文将着重讨论在 Visual Basic .NET 应用程序设计中如何正确对待事件处理程序的继承。

读者要求
本文假定读者熟悉面向对象程序设计和类的继承性。若您尚未熟悉它们,请参阅《组件的多态性》 ("Polymorphism in Components")。

继承事件处理程序
当组件被继承时,它的所有成员都被封装到子类中。事件处理程序是响应特定事件的方法,是组件成员之一,因而也被继承。请看一个典型的事件处理程序:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e as _
System.EventArgs) Handles Button1.Click
Static Counter as Integer = 0
Counter += 1
MessageBox.Show (" This button has been clicked " & _
Counter.ToString() & " times.")
End Sub

我们看到,宣告部分末尾的 Handles 子句把处理程序关联到特定的事件上。具体而言,上述代码将在 Button1.Click 事件发生时运行。这就是用于定义事件处理程序的典型语法。

为了实现 override ,你必须使用 Overridable 关键字,并且重新定义其可见性为 Protected 、 Protected Friend 或者 Public 。下面示范如何 override 事件处理程式:

Protected Overridable Sub Button1_Click(ByVal sender As System.Object, _
ByVal e as System.EventArgs) Handles Button1.Click
Static Counter as Integer = 0
Counter += 1
MessageBox.Show (" This button has been clicked " & _
Counter.ToString() & " times.")
End Sub

在组件中继承事件处理程序

事件处理程序的 override 固然与其它方法的 override 大同小异,有一点却不得不提:在 override 事件处理程序时必须除去 Handles 子句。

如何 override 组件的事件处理程序

1) 在事件处理程序的宣告部分加入 Overrides 关键字

请注意:不要附加 Handles 子句。因为父类的处理程序已经关联了特定事件,子类将继承这一切。换句话说,父类所关联的事件可以激活子类的处理程序,因而这里的 Handles 子句是多余的。
下面示范如何 override 前述事件处理程序:

Protected Overrides Sub Button1_Click(ByVal sender As System.Object, _
ByVal e as System.EventArgs)
Static Counter as Integer = 0
Counter += 1
MessageBox.Show (" This inherited button has been clicked " & _
Counter.ToString() & " times.")
End Sub

2) 为什么不需要 Handles 子句

前面提到,我们没有使用关联事件的 Handles 子句并不是一个疏漏,而是由 .NET 框架的事件处理机制所决定的。父类中的 Handles 子句将事件处理程序关联到特定事件上,这种关联将被子类继承。因此,即令子类中没有 Handles 子句,父类所关联的事件也能激活子类的事件处理程序。倘若此时加上 Handles 子句,则处理程序将被再次关联到事件上。重复关联的后果是处理程序将被连续激活两次。例如:

' 错误的代码
Protected Overrides Sub Button1_Click(ByVal sender As System.Object, _
ByVal e as System.EventArgs) Handles Button1.Click
Static Counter as Integer = 0
' 本例中使用了 Handles 子句,
' 因而每当按钮 Button1 被点击一次,
' 变量 Counter 将会增加两次 ;
Counter += 1
' 消息框也会弹出两次,
' 显示的内容也将违背设计意图
MessageBox.Show (" This inherited button has been clicked " & _
Counter.ToString() & " times.")
End Sub

结论
在 Visual Basic .NET 中,事件处理程序的 override 可能造成难以侦错的 bug 。例如在使用 Handles 子句关联事件处理程序时就要格外小心,以免发生重复关联。

相关软件

2345加速浏览器官方版

2345加速浏览器官方版 | 56.2MB

2345加速浏览器官方版

新一代2345加速浏览器采用Chromium和IE双内核,主打极速与安全特性。基于Chromium深度定制,引入网页智能预加载技术,访问网页更快速..

QQ浏览器官方正式版

QQ浏览器官方正式版 | 49.67MB

QQ浏览器官方正式版

QQ浏览器秉承TT浏览器1-4系列方便易用的特点,但技术架构不同,交互和视觉表现也重新设计,采用Chromium内核+IE双内核,让浏览快速稳定...

百度浏览器最新版下载

百度浏览器最新版下载 | 13.3MB

百度浏览器最新版下载

q百度浏览器,是一款简洁轻快、智能懂你的浏览器。依靠百度强大的搜索平台,在满足用户浏览网页的基础上,它整合百度体系业务优势,带给用户更方便的浏览方式功能...

UC浏览器官方正式版

UC浏览器官方正式版 | 44.2MB

UC浏览器官方正式版

UC浏览器(UC Browser)是UC Mobile Limited在2004年8月开发的一款软件,分uc手机浏览器和uc浏览器电脑版。UC浏览器是全球使用量最大的第三方手机浏览器...

猎豹浏览器2022最新版下载

猎豹浏览器2022下载 | 45MB

猎豹浏览器2022最新版下载

猎豹安全浏览器对Chrome的Webkit内核进行了超过100项的技术优化,访问网页速度更快。其具有首创的智能切换引擎,动态选择内核匹配不同网页...

360安全浏览器官方版下载

360安全浏览器下载 | 21.4MB

360安全浏览器官方版下载

360安全浏览器拥有全国最大的恶意网址库,采用恶意网址拦截技术,可自动拦截挂马、欺诈、网银仿冒等恶意网址。独创沙箱技术,在隔离模式即使访问****也不会感染...