博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在vb.net中使用抽象类
阅读量:2169 次
发布时间:2019-05-01

本文共 1826 字,大约阅读时间需要 6 分钟。

原文:http://www.yesky.com/401/207901.shtml 

通过VB.NET,VB程序员终于拥有了全部面向对象的特征.其中之一就是程序员以创建抽象类.虽然抽象类在编程中的作用常被过高估计,但抽象类确实提供了不少开发可行性。 


  一段时间以来,VB程序员都在要求
向他们提供全面的备受
++及JAVA程序员推崇的面向对象的特性.虽然有少部份与OOP相关的特征已被添加到旧的版本上,但程序员还得等待VB.NET,将实际意义上的OOP添加到VB上去。通过OOP你可以创建抽象类. 虽然大家都对它寄予了厚望,但令人惭愧的是抽象类仅仅只能给程序员提供更多的开发可行性而已.


  阅读本文您需要具备一定的面向对象以及VB.NET的相关知识.


  很容易解释什么是抽象类? 抽象类即是不能被实例化的类,而且你不能够在自己的程序里通过这种类来生成一个对象.


  你也许会认为不能被实例化的类是没多大用处的.事实上,在某些环境下, 抽象类是非常有用的.你可以把它作为一个基础类以此为基类创建新的类. 在对功能要求不高的环境下生成的类,会向你提供一个规定的启始点,通过这个点你可以推导出非抽象类.


  在此假设一个要用抽象类的程序设计。假设图形程序提供了大量的drawing类:比如圆,三角,曲线等等.所有这些作drawing类都有某个共同的特性,比如位置,大小,色彩,删除等属性.其它的类成员,比如描绘图形的方法就不同于每个单独的类.因此,这样为利用抽象类创造了一个理想的环境.


  在抽象类中,你需要定义所有drawing类都需要的全部
类成员. 因为drawing类不响应任何图形.但是当把它作为shape-specific drawing类中的base类,你需要确认所有这些非-抽象类拥有最基本的功能.


  
创建抽象类


  对抽象类的定义很简单,只要在定义域里加入关键字MustInherit,如:


Public MustInherit class MyAbstract class
 ...
End class

  除开要包含关键字之外, 抽象类的定义与非抽象类的定义没什么两样. 抽象类包含了从其它类承继而来的属性及方法等等.但是,在抽象类中定义的类成员(属性及方法)是如何与衍生类中的定义元素产生联系的呢?在此并没有复杂的规则,但你作出的决定是与你所拥有的类的性能及它将衍生出来的 类所密切相关。


  你有三个选择。


  1、抽象类中已有的功能比如属性、方法等在衍生类中可以被重载。实现这一功能只要在成员定义中输入Overridable关键字。如:


Public Overridable Sub Move(NewX As Integer, NewY As Integer) 
...
End Sub

  2、为重载abstract base 类中的成员,衍生类在执行语句中须使用Overrides关键字段。如:


Public Overrides Move(NewX As Integer, NewY As Integer)
...
End Sub

  3、抽象类中已有的功能不能在衍生类中重载。即是,衍生类必须使用抽象类定义的成员。如果你在抽象类中不使用任何特殊字段来定义任一成员将会产生该缺省。以下代码定义了抽象类中的Xpos属性。衍生类必须使用该属性,因为该属性不能被重载。如:


Public Property XPos() As Integer
 ...
End Property

  利用MustOverride关键字来定义抽象类成员,该成员可以在衍生类中重载。以下举例说明了衍生类必须执行名为GetObjectAt()的方法。


Public MustOverride Function GetObjectAt(X As Integer, Y As Integer) As Object

  请注意MustOverride成员不需要End Sub 或End Function语句。使用MustOverride最方便的地方在于它不仅规定了成员的名称同样也规定了成员的符号。先前的例子要求任一衍生类都需定义名称为GetObjectAt()的方法,因此会产生两种类型的整型变量以及返回一个类型对象。该方法是在衍生类中的执行是完全根据程序员的指令要求。通过MustOverride字段说明的方法一些时候也被称为abstract 成员。

转载地址:http://epozb.baihongyu.com/

你可能感兴趣的文章
(PAT 1143) Lowest Common Ancestor (二叉查找树的LCA)
查看>>
(PAT 1061) Dating (字符串处理)
查看>>
(PAT 1118) Birds in Forest (并查集)
查看>>
数据结构 拓扑排序
查看>>
(PAT 1040) Longest Symmetric String (DP-最长回文子串)
查看>>
(PAT 1145) Hashing - Average Search Time (哈希表冲突处理)
查看>>
(1129) Recommendation System 排序
查看>>
PAT1090 Highest Price in Supply Chain 树DFS
查看>>
(PAT 1096) Consecutive Factors (质因子分解)
查看>>
(PAT 1019) General Palindromic Number (进制转换)
查看>>
(PAT 1073) Scientific Notation (字符串模拟题)
查看>>
(PAT 1080) Graduate Admission (排序)
查看>>
Play on Words UVA - 10129 (欧拉路径)
查看>>
mininet+floodlight搭建sdn环境并创建简答topo
查看>>
【linux】nohup和&的作用
查看>>
Set、WeakSet、Map以及WeakMap结构基本知识点
查看>>
【NLP学习笔记】(一)Gensim基本使用方法
查看>>
【NLP学习笔记】(二)gensim使用之Topics and Transformations
查看>>
【深度学习】LSTM的架构及公式
查看>>
【python】re模块常用方法
查看>>