vb.net的面向对象性

在vb的早期版本(1.0-3.0)并没有包括面向对象的功能,从Vb 4.0开始,用户可以象建立一个新的窗体一样建立一个新的类,并把它作为一个新的对象.但还只能称是半面向对象的编程语言。而Vb.net是真正意义上的完全面向对象的编程语言。本文将从Vb开始一直到Vb.net,介绍面向对象的一些基础知识。

Visual Basic中处理的任何事物几乎都和对象有关系,如果您对面向对象编程没有认识,则需要建立以下一些概念。
对象是一些把属性(Properties)、字段(fileds)、方法(methods)和事件(event)作为一个单独的数据类型进行处理的实体。对象可以使用户只需首先声明一些变量和方法以后,在感觉需要使用的时候,调用一个它的对象进行重用就可以了。
例如想保存一辆汽车的信息,就可以通过定义一些变量来描述一辆车的颜色和马力,但问题是,这个变量只是描述这一辆汽车的参数,如果又要描述另一辆汽车的参数的话,则又要定义一些其他变量来存储这些信息。如果使用类,就可以解决这个问题,只需要定义一个通用的汽车的类,每当需要描述一辆汽车的时候只需定义一个对象就可以了,这样就达到了代码重用的目的。
类描述了对象的字段、属性、方法以及对象的事件,对象是类的一个实例。在定义了一个类后,可以在需要的时候定义很多对象。
1.字段,属性,方法和事件
类是由属性,字段,方法和事件组成的,字段就是一个对象含有的片断的信息。用户可以象使用变量一样使用属性来存储一些信息。例如,一个对象名叫“Car”,其中有一个字段名为“Color”,下面的代码就是显示怎样改变“Color”字段的值的:
Car.Color="Blue"
属性的检索和设置与字段相似,但是它们在类中是以"Property Get"和"Property Set"过程来定义的。
方法表示了类可以做的一些事情,例如Car对象可以有StartEngine,Drive和Stop方法。
事件是表示一个对象从外部得到的信息的一个标示,事件允许对象任何时候在事件调用的时候做出相应的动作。例如,类Car的一个事件可以是Check_Engine。因为微软的Windows是一个事件驱动的系统,所以事件可能会来自于任何一个地方。比如,用户点击键盘或鼠标时,就是触发了一个事件。当然,一些事件的触发可能来自于其他的对象。
2.封装,继承和多态
属性,方法和事件只是面向对象编程的部分概念,真正的面向对象编程需要对象满足和支持下面三个特性:封装性,继承性和多态性。
封装性表示一个对象的属性和方法。对外界而言,是不能直接访问的。而对象本身对于属性和方法具有绝对的控制,比如一个对象可以在属性允许变化之前确认一下变量的值。
继承性表示可以在一个类的基础上建立一个新类。派生类,也就是继承类,可以具有基本类的所有属性、方法和事件,并且可以加上一些其他的属性和方法,例如可以根据基本类Car建立一个新类SUV。SUv类可以从Car类中继承Color属性,而且还可以加上一些其他的属性例如:FourWheelDrive。
多态性是指一些不同的类可以建立一个具有相同名称的属性或者方法。多态性对于面向对象编程是非常重要的,因为它可以使用户不论在什么时候,也不论用户正在处理什么对象,都可以调用这个具有共同名称的方法。例如有一个基本类Car,多态性可以允许它的派生类具有不同定义的StartEngine方法,派生类DieselCar的StartEngine方法可能和基本类的StartEngine方法完全不一样,但是也可以调用的。当然,其他的方法或者属性也可以这样处理。
类是面向对象的基础。类和Type数据结构的区别在于,Type数据结构只有数据成员,而类的成员包括数据成员、属性和方法。类就是一个没有图形界面的ActiveX控件,用户可以使用它,但不能看到它。在vb.net以前的版本中,类不能继承,但在.Net版本中,实现了类的继承。用户可以通过以下的描述来比较类和Type数据结构的区别。
Structures是一个把一些相关的数据归类的强有力的工具,如:一个用户定义的一个名为udtAccount的数据类型:

Public Type udtAccount
      Number As Long
Type As Byte
CustomerName AS String
Balance As Double
End Type

用户可以申明一个udtAccount类型的一个实例,然后设置里面字段的值,把整个记录打印出来,把存到数据库中等操作。
虽然Structures类型设置的功能很强大,但是在代码中,Structures可能会带来一些问题。用户可能建立一个Withdrawal过程,但在Withdrawal超过了它的平衡点的时候会产生错误,而且也没有办法阻止程序的其他地方改变Balance字段。
换一句话说,操作过程和Structures的联系靠的只是一些规定、人为的记忆以及程序员对代码维护知识的了解。
而面向对象编程就可以解决这个问题,它把数据和操作过程结合在一起,并且组成一个独立的实体。用户定义Account为一个类来代替udtAccount Structure时,这些数据都变成了私有遥,而且那些访问这些数据的操作过程也被定义为这个类的一部分,成为了这个类的属性和方法,这就是所谓的封装性,也就是说一个对象就是一个包含数据和操作的单元。
当用户通过一个类建立一个Account对象时,就可以避免这种错误,用户只能通过这个对象的属性才能访问它的一些数据字段,下面的代码片断显示了Account类中的过程怎样支持封装性:

'The account balance is hidden from outside code.
Private mdblBalance As Double
'The read-only Balance property allows outside code
'to find out the account balance
Public Property Get Balance() As Double
     Balance=mdblBalance
End Properyt
'The Withdrawal method Changes the account balance
'but only if an overdraft error doesn't occur
Public Sub Withdrawal(ByVal Amount As Double)
    If Amount>Balance Then
       Err.Raise Number=VBObjectError+2081._
       Description:="Overdraft"
    End If
    mdblBalance=mdblBalance-Amount
End Sub

用户并不需要担心如何使用类中的操作过程,也不必担心属性、过程、私有变量的一此语法,最重要的就是记住,用户可以定义一个类来封装自己的数据和操作方法。
用户也不必要担心是否使用权了正确的对Account的操作,因为这些操作现在也被包含在对象之中了。
类在vb.net中是一个非常重要的部分,几乎所有正规的程序都包括了一个或者几个类,在vb.net中,类模块和窗体的区别已经不存在了,几乎所有的程序都是由类组成的,为了更好地使用这些类,它们被按照不同的功能分在不同的功能类库里。
除去这些表面现象,这些类库都是在独立的DLL动态库里,用户只需要用Imports说明就可以引用它们了,这样这些类里面的函数就可以用了,如:

Import System.Collections 'Use Collection namespace classes

逻辑上,每一个类库代表了一个独立的命名空间(namespace),当用户引用了一个命名空间后,编译器将可以找到这些命名空间所对应的类和方法。最常用的命名空间是"System"命名空间,它是一个缺省的引用,并不需要用户去申明它,其中包括了一些用户访问最基本的类和方法,如:Application,Arry,Console,Exception,Object以及一些基本的标准的对象,如:Byte,Boolean,Single,Double,String。在下面的最简单的控制台程序中,我们可以看一看关于System的引用:

Imports System
'Simple Vb Hello World program
Public Class cMain
    shared sub Main() '表明启动函数是Main
          '在控制台中写文本
          Console.WriteLine("Hello Vb World")
    End Sub
End Class

上面的程序只是在DOS窗体中写了一句文本"Hello Vb World",程序必须以Sub Main子例程开始启动,而且在类模块中,它必须声明为"shared",而在vb.net中这个程序则应该写成:

'simple Vb Hello World Program
Public Module cMain
   Sub Main()
       Console.WriteLine("Hello Vb World")
   End Sub
End Module

在上面这两个例子中,除了在类模块中,Sub Main被声明为"Share"。读者可以看出它们是很相象的,在Vb.net中模块和早期的版本的vb中的模块的作用相似,在模块中声明的方法和常量在整个程序中都是公有的。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, 方法
, vb 数据库操作
, 属性
, 用户
, color balance
, 一个
, 一些
用户类
,以便于您获取更多的相关知识。

时间: 2024-10-25 16:18:58

vb.net的面向对象性的相关文章

用VB.NET和Excel排生产计划--企业信息化探讨之一

excel 用VB.NET和Excel排生产计划 -企业信息化探讨之一 屠恩海(SunHai) 开发工具:Microsoft Visual Studio .NET 2003 操作系统:Windows XP 企业信息化失败原因探讨 中国企业上线ERP的成功率是不高的.这是为什么呢? 实用的ERP系统有两个特征: 1. 要求具有高度的定制性 2. 要能根据企业实际随时修改ERP系统 而现在企业的ERP系统开发基本采用外包模式,开发人员虽然也可以深入公司各个部门,掌握各个方面信息,然后进行定制开发.但

用VB.NET和Excel排生产计划

excel 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 http://www.Tuenhai.com/ 开发工具:Microsoft Visual Studio .NET 2003 操作系统:Windows XP 企业信息化失败原因探讨 中国企业上线ERP的成功率是不高的.这是为什么呢? 实用的ERP系统有两个特征: 1. 要求具有高度的定制性 2. 要能根据企业实际随时修改ERP系统 而现在企业的ERP系统开发基本采用外包模式,开发人员虽然也可以深入公司

入门教程:ASP设计常见问题及解答精要

教程|解答|入门教程|设计|问题 作为微软推出的网页与数据库解决方案,ASP由于有微软得天独厚的操作系统等技术后盾支持,因此得到了迅速的发展,并且正受到越来越多的欢迎,在目前在电子商务网站的建设中有很多都使用ASP来编写程序. 近来有很多的读者向我们咨询学习ASP的方法和在学习中遇到的一些问题,其中有一些是初学者经常遇到和面临的问题.为了让读者在学习ASP的过程中加深对ASP的了解,并能够有效地解决遇到的问题,我们特别收集了比较有代表性的一些问题,在此列举出来并一一给予解答,希望能在这有限的篇幅

ASP+和JSP之间的抉择(转载)

asp+|js /*转自jsp中国论坛另:Blueski是谁?特此致谢*/ ///***********************************以下为内容{Blueski为您编译.原文名:JSP VS ASP Part 2: The Future According to ASP+英文作者没有记下,非常抱歉} 由于我同时是ASP和JSP的程序员,所以正开始写一系列的文章来比较两者的差别,当我写到一半时,ASP+被宣布了,所以我在重新开始审视这个问题.我正在做一个JSP项目和一个ASP项目

ASP+与JSP之间的抉择

asp+|js 由于我同时是ASP和JSP的程序员,所以正开始写一系列的文章来比较两者的差别,当我写到一半时,ASP+被宣布了,所以我不得不重新开始审视这个问题.我正在同时做一个JSP项目和一个ASP项目,后者十分有趣,因为它开始是采用ASP3.0,但当项目结束后我将会转换为ASP+.到那时我将可以对ASP+有更近的考察,并提供更好的ASP+和JSP的比较.本文是我目前对ASP+的一些认识和看法,并分析了它对于象我这样的普通开发人员可能会产生的影响. 通过最初步的比较,我发现: 1) 面向对象性

ASP+和JSP之间的抉择

Blueski为您编译. 原文名:JSP VS ASP Part 2: The Future According to ASP+ 英文作者没有记下,非常抱歉 由于我同时是ASP和JSP的程序员,所以正开始写一系列的文章来比较两者的差别, 当我写到一半时,ASP+被宣布了,所以我在重新开始审视这个问题. 我正在做一个JSP项目和一个ASP项目,后者十分有趣,因为它开始是采用ASP3.0, 但当项目结束后我会将转换为ASP+.那时我将可以对ASP+有更近的考察,并提供更好的 ASP+和JSP的比较.

ASP设计常见问题及解答精要-4

23.问题:在ASP文件中读取HTML的表单字段有几种方法? 答:Request对象除了可以用来读取附带在网址后面的参数以外,也可以读取HTML表单字段的内容,经常使用的语法结构如下: < Form name =Formname method="Get|Post"Action="URL">< Form >其中的method可以接受Get或Post两种传输的方法,其中的Post是允许传输大量数据的方法,而Get方法会将所要传输的数据附在网址后面

ASP设计常见问题及解答精要(四)

23.问题:在ASP文件中读取HTML的表单字段有几种方法? 答:Request对象除了可以用来读取附带在网址后面的参数以外,也可以读取HTML表单字段的内容,经常使用的语法结构如下: < Form name =Formname method="Get|Post"Action="URL">< Form >其中的method可以接受Get或Post两种传输的方法,其中的Post是允许传输大量数据的方法,而Get方法会将所要传输的数据附在网址后面

【转载】每个程序员都应该学习使用Python或Ruby

     如果你是个学生,你应该会C,C++和Java.还会一些VB,或C#/.NET.多少你还可能开发过一些Web网页,你知道一些HTML,CSS和JavaScript知识.总体上说,我们很难发现会有学生显露出掌握超出这几种语言范围外的语言的才能.这真让人遗憾,因为还有很多种编程语言,它们能让你成为一个更好的程序员. 在这篇文章里,我将会告诉你,为什么你一定要学习Python或Ruby语言. 跟C/C++/Java相比 - Python/Ruby能让你用少的多的多的代码写出相同的程序.有人计算