-
全面剖析VB.NET(3)—完善的面向对象支持
三、完善的面向对象支持
VB.NET提供了完善的面向对象编程支持,是一种真正的OO语言。
完善的面向对象支持应该包括封装(Encapsulation),继承(Inheritance)和多态性(Polymorphism)。当前的VB6已经部分地实现了这些支持,但仍因某些地方未能符合标准而受到责难。
封装是指对象只显露公用的方法和属性。VB6已经提供了健壮的封装支持,具体通过Public和Private关键词实现,这两个关键词既可以用于方法,也可以用于属性。VB.NET进一步完善了VB6的封装支持,增加了一个Protected关键词。
多态性即为“多种形态”,VB从4.0开始已经提供多态性支持,它在VB.NET中没有什么变化。然而,由于VB.NET中类支持两种类型的继承——接口继承和实现继承,多态性将有更广泛的用途。
VB6已经支持一种称为接口继承(interface inheritance)的继承形式,VB.NET支持实现继承(implementation inheritance)完善了继承机制。过去,我们用VB的接口继承模拟实现对象继承,但现在不必再采用这种模拟技术。正如其他面向对象的语言,在VB.NET中我们可以覆盖基类的方法和属性,也可以借助多态性创建出健壮的、可升级的组件。例如,假设有一个从基类Crane继承的ForkLift类,利用下面的代码可以覆盖基类中Lift方法的默认实现:
Public Class ForkLift
Inherits Crane
Overrides Sub Lift(ByRef _
Height As Double)
Height = Height + 10
End Sub
End Class
VB.NET不仅允许覆盖方法或属性,而且还支持方法重载(Overload)。重载是一种定义具有相同名字、不同数据类型的方法或者属性的能力。例如,假设有一个对不同数据类型的数组进行排序的组件,我们无需为它定义多个排序方法的名字(每种数据类型一个方法名字);相反,我们可以重载单个方法名字:
Overloads Sub SortArray(ByRef _
aValues()As String)
...
Overloads Sub SortArray(ByRef _
aValues() As Integer)
...
Overloads Sub SortArray(ByRef _
aValues() As Object)
在VB.NET中,窗体以类模块形式出现。它意味着类本身包含了所有构造窗体所必需的代码。你可能会奇怪为什么VB.NET中会看到这些代码而以前不行,事实上这个变化带来了许多强大的新功能,比如继承这些窗体的能力。Microsoft称这种技术为“可视化继承”(Visual Inheritance)。假设我们为大多数对话窗口设计了一个标准的格式,比如窗体某一边有一列按钮、某个角上有一个LOGO图标,可视化继承使得我们能够设计一个窗体模板(类),需要时只需从这个基类继承就可以得到新的对话窗口。
VB.NET提供了完善的面向对象编程支持,是一种真正的OO语言。
完善的面向对象支持应该包括封装(Encapsulation),继承(Inheritance)和多态性(Polymorphism)。当前的VB6已经部分地实现了这些支持,但仍因某些地方未能符合标准而受到责难。
封装是指对象只显露公用的方法和属性。VB6已经提供了健壮的封装支持,具体通过Public和Private关键词实现,这两个关键词既可以用于方法,也可以用于属性。VB.NET进一步完善了VB6的封装支持,增加了一个Protected关键词。
多态性即为“多种形态”,VB从4.0开始已经提供多态性支持,它在VB.NET中没有什么变化。然而,由于VB.NET中类支持两种类型的继承——接口继承和实现继承,多态性将有更广泛的用途。
VB6已经支持一种称为接口继承(interface inheritance)的继承形式,VB.NET支持实现继承(implementation inheritance)完善了继承机制。过去,我们用VB的接口继承模拟实现对象继承,但现在不必再采用这种模拟技术。正如其他面向对象的语言,在VB.NET中我们可以覆盖基类的方法和属性,也可以借助多态性创建出健壮的、可升级的组件。例如,假设有一个从基类Crane继承的ForkLift类,利用下面的代码可以覆盖基类中Lift方法的默认实现:
Public Class ForkLift
Inherits Crane
Overrides Sub Lift(ByRef _
Height As Double)
Height = Height + 10
End Sub
End Class
VB.NET不仅允许覆盖方法或属性,而且还支持方法重载(Overload)。重载是一种定义具有相同名字、不同数据类型的方法或者属性的能力。例如,假设有一个对不同数据类型的数组进行排序的组件,我们无需为它定义多个排序方法的名字(每种数据类型一个方法名字);相反,我们可以重载单个方法名字:
Overloads Sub SortArray(ByRef _
aValues()As String)
...
Overloads Sub SortArray(ByRef _
aValues() As Integer)
...
Overloads Sub SortArray(ByRef _
aValues() As Object)
在VB.NET中,窗体以类模块形式出现。它意味着类本身包含了所有构造窗体所必需的代码。你可能会奇怪为什么VB.NET中会看到这些代码而以前不行,事实上这个变化带来了许多强大的新功能,比如继承这些窗体的能力。Microsoft称这种技术为“可视化继承”(Visual Inheritance)。假设我们为大多数对话窗口设计了一个标准的格式,比如窗体某一边有一列按钮、某个角上有一个LOGO图标,可视化继承使得我们能够设计一个窗体模板(类),需要时只需从这个基类继承就可以得到新的对话窗口。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式