VB.NET Override处理方式解读

开发 后端
VB.NET Override的实现需要使用Overridable 关键字,而且还需要我们对其进行重新定义。相关的应用方法将会在文中给出。

在学习了VB.NET这门编程语言后,大家会慢慢的发现这门语言中隐藏的知识是很广的,有很多功能值得我们去深入的研究。比如VB.NET Override就是其中一个比较难掌握的知识点。在类或控件的继承中,子类或子控件封装了父类的所有函数,其中包括事件处理程序。本文将着重讨论事件处理程序的VB.NET Override实现方法。

继承事件处理程序

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

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

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

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

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

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

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

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

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

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

下面示范如何 override 前述事件处理程序:

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

2) 为什么不需要 Handles 子句

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

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

结论

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

【编辑推荐】

  1. VB.NET基本数据类型实用经验总结
  2. VB.NET用户登录页面实现技巧分享
  3. VB.NET加密文件实现技巧分享
  4. VB.NET数组赋值怪异现象揭秘
  5. VB.NET自定义属性应用方式解析
责任编辑:曹凯 来源: pcppc.cn
相关推荐

2010-01-13 17:23:36

VB.NET动态事件

2010-01-07 17:57:22

VB.NET构造函数

2010-01-22 18:32:23

VB.NET数据并发性

2010-01-11 17:12:12

VB.NET事务处理

2010-01-18 17:37:32

VB.NET文本框处理

2010-01-13 09:31:39

VB.NET窗体打印

2010-01-11 11:02:27

VB.NET调用存储过

2010-01-12 18:12:58

VB.NET事件

2010-01-14 09:55:06

VB.NET IEnu

2009-10-14 16:46:25

VB.NET OnSt

2010-01-08 14:50:47

VB.NET测试硬盘速

2010-01-18 14:47:42

VB.NET获取环境变

2010-01-19 13:36:16

VB.NET可选参数

2010-01-19 17:03:25

VB.NET可执行语句

2010-01-08 10:48:05

VB.NET多线程

2010-01-08 10:37:50

VB.NET数据库

2010-01-11 17:40:36

VB.NET相框效果

2010-01-12 17:49:03

VB.NET键盘输入

2010-01-07 15:49:10

VB.NET DoLoop

2010-01-20 14:00:03

VB.NET串联运算符
点赞
收藏

51CTO技术栈公众号