弗拉维奥帕伦蒂:Visual Basic .NET的Override事件处理程序
来源:百度文库 编辑:中财网 时间:2024/10/05 23:47:58
Visual Basic .NET的Override事件处理程序
发布时间:2008-04-03 10:37:09 来源:编程爱好者网站 作者:编程爱好者网站 点击:193
王凌峰 编译介绍 在类或控件的继承中,子类或子控件封装了父类的所有函数,其中包括事件处理程序。 本文将着重讨论在 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 子句关联事件处理程序时就要格外小心,以免发生重复关联。
visual basic与visual basic.net的区别?
Visual Basic.NET与Visual Basic 6.0的关系是什么?
谁有visual basic.net的序列号!!!
visual basic NET下载
visual basic.net 与Microsoft Visual Basic 2005 速成版 的区别
求visual basic.net 2003
visual basic.net教程下载
Visual Basic 的 net 版 的安装方法
那里可以下visual basic .net 的开发工具呀!!!
谁知道Visual Basic .NET 2003 standard 的下载地址?
请问大家一个问题,关于Visual Basic.net的问题
用多媒体学Visual Basic.NET与Visual Studio.NET的关系
Visual Basic.NET和 Visual Basic一样吗
Visual Basic 8.0 和 Visual Basic .NET 一样吗?
Visual Basic.NET和Visual Basic有什么不同
我要学习Visual Basic 语言编程,哪里有Visual Basic.net的中文版本供免费下载?
visual basic 的问题
visual basic 的问题
Visual Basic的问题
visual basic 的起源
哪有下载visual basic.net!!!!
帮帮忙我要学 Visual Basic.NET
visual Basic. NET在那可以下载
哪里可以下载visual basic .net 中文版