vb.net的类和对象基础

OOp(Object-Oriented-Programming)是相对于结构化程序设计(Structure Programming)而言的,表示采用面向对象的思想进行软件的编制。它是当今最流行的编程模式。“面向对象技术”追求的是软件系统对现实世界的直接模拟,尽量实现将现实世界中的事物直接映射到软件系统的解空间。

对象是一些把属性(Properties)、字段(fileds)、方法(methods)、事件(event)作为一个单独的数据类型进行处理的实体。编程还需要对象满足和支持下面三个特性:封装性、继承性和多态性。对象可以使用户只需首先声明一些变量和方法以后,就可以在需要使用的时候,调用一个它的对象进行重用。
在Visual Basic的早期版本中(1.0-3.0)并没有包括面向对象的功能,从vb 4.0开始,用户可以象建立一个新的窗体那样建立一个新的类,并把它作为一个新的对象,类在Vb.net中是一个非常重要的部分,几乎所有正规的程序都包括了一个或者几个类,在vb.net中,类模块和窗体的区别已经不存在了,几乎所有的程序都是由类组成的,为了更好的使用这些类,它们被按照不同的功能分中不同的功能类库里。

vb.net在声明、构造以及执行类上比vb 6.0有很大的变化,同样在对象的处理上也有不小的改变。这些改变影响了定义一个对象、引用和取消引用对象以及使用捆绑技术的方法。
vb.net没有使用CreateObject语句来创建对象。CreateObject是Visual Basic与COM密切相关的一个产物。因为vb.net不再使用COM,所以从Vb.net开始就不再使用CreateObject。vb.net使用New语句来创建对象。用户可以在代码的任何地方使用New。下面就是一个创建一个变量并且在类的一个实例中创建一个对象的实例:
Dim obj As TheClass
obj=New TheClass()
可以简化上面的语句:
Dim obj As New TheClass()
在Visual Basic 6.0中,以上的两段语句会存在一些问题,但是在vb.net中上瑞的两段语句之间没有区别,只是第二段语句缩短了而已。如果用户在一个模块中声明一个变量,那个变量就只有在该模块中才有效。在许多情况下,用户想在方法的作用域中声明一个变量,或者想在模块(比如Try...End或者loop循环结构)中创建一个类的实例。在这样的情况下,用实例化来组合声明有些不妥。
上面的语句为用户定义了一个变量并实例化了一个类。这条语句可能在处理继承或者多个界面的时候会更有用。用户可以声明变量为其中一种类型并且基于要执行界面的类来实例化对象:
Dim obj As MyInterface=New Theclass()
也可以同时利用复杂的语句。假如现在有个需要对象引用的方法,就可以这样来实例化对象:
DoSomething(New TheClass())
以上的语句是调用DoSomething方法并且传递Theclass的一个新的实例作为参数。这个新的对象就只有存在于这个方法的调用事件内,即当方法完成之后,这个对象就自动被取消引用。
这里还得注意一下,取消引用一个对象不是意味着马上终止这个对象。这一点前面的介绍中有过解释。对象只有在.NEt的垃圾收集处理程序的时候才将它们从内存清除掉。
下面的例子可能更复杂。不是利用一个对象引用,这里的方法需要一个字符串。用户可以从一个方法提供一个字符串数值到对象中来实例化对象并调用方法:
DoSomething(New TheClass().GetStringData())
很显然,用户可能需要仔细观察一下这条语句的可读性。语句的压缩往往降低了可读性,这一点是应该注意到的。
当处理对象的时候,这里没有使用Set语句。在vb 6.0中,处理对象引用的时候,用户不得不使用Set命令处理来自其他数据类型的对象。而在vb.net中来自其他数据类型的对象是采用不同的方法来处理的,这里可以使用直接的参数来处理对象,就象处理整型或者字符型数据类型。这个Set命令在Vb.net中不再有效。
在vb 6.0中,用户可以通过设置对象引用为Nothing(空)来取消引用对象。这点和vb.net中的处理方法是一样的。
Dim obj As TheClass
obj=New TheClass()
obj=Nothing
但是在vb.net中这条语句有不同的效果。因为vb.net不是使用引用计算来终止对象,而是依靠垃圾收集机理。而在vb 6.0中,当没有变量访问对象的引用,这个对象就被终止。在vb.net中,以下这样看法是错误的:当垃圾收集处理程序发现对象没有被引用它就被终止。正确的应该是,是最后一个引用被移除之后的一段时间后才将对象从内存中清除。但是这并没有清除被取消对象的数值。如果用户有一个长时间运行的算法,那么最好在处理程序中显示式地取消引用这个对象,这样就可以在可能的情况下由垃圾收集程序清除它们。只要代码保留了对象的引用,那么对象就会保持在内存中而不会被垃圾收集程序清除。
vb.net可以创建处理代码,这些处理代码是运行在.NET框架上的。所有的管理代码可以和其他类型的处理代码交互作用,而不管用户是用什么编程语言来创建这些组件的。这就意味着用户可以在一种编程语言上创建一个类,然后应用到另外的编程语言中,当然也包括继承。这正是交叉语言混继承的混合编程机理。实际上,现在有许多程序设计人员已经在应用这个技术了。许多的.NEt系统类库是在C#上编写的,而用户在vb.net上编写程序的时候,可以继承这些类作为基类。
举个例子,在vb.net创建一个类库工程取名为vblib,并且增加一个简单的类为Parent,代码如下:
Public Class Parent
Public Sub DoSomething()
MsgBox(Parent Dosomething,MsgBoxStyle.Information.Parent)
End Sub
End Class
可能许多程序设计人员还不知道vb.net支持Windows窗体的可视化继承。可视化继承,就是说用户可以创建一个Windows窗体,然后可以继承这个窗体使得其他窗体具有与该窗体相同的版面布置、控件和行为。用户也可以使用继承来创建自己的Windows控件。比如,用户可以创建一个性能提高了的TextBox(文本框)来实现数据输入的特殊的有效性校验。具体的做法是:通过继承创建一个由原始文本框控件类继承而来的子类,并进行适当的修改以提高文本框的性能,使之可以实现对数据输入的有效性校验。这一点跟Web表单控件是相同的,Web表单控件可以由一个已经存在的Web表单控件来创建一个子类。用户的子类可以重载已有的函数或者增加一些新的函数。
Vb.net不仅提供了继承,而且还提供了其他许多重要的新特性。vb.net改进了创建和处理多界面的方法,使得用户可以更容易的使用它们。另外,vb.net支持事件作为界面的一部分,使得现在可以在界面上表达所有的元素:方法、属性、事件。此外,在vb.net中终止对象不是通过引用计数来实现,而是利用“垃圾收集”程序来将对象从内存中清除。总而言之,vb.net比起Visual Basic以前的版本变说,其面向对象的能力大大增加了,而且vb.net也保留了低版本的绝大多数的特性。
关于面向对象的详细理论请参阅后续章节:vb.net的OOP结构。

时间: 2024-09-28 04:15:26

vb.net的类和对象基础的相关文章

浅析Objective-C Runtime 类与对象教程

Objective-C语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等. 这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码.对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以正常的运行.这个运行时系统即Objc Runtime.Objc Runtime其实是一个Runtime库,它基本上是用C和汇编写的,这个库使得C语言有了面向对象的能力. Runtime库主

走近VB.Net(一),VB中的族,类,对象(摘录部分MSDN)

对象 走近VB.Net(一),VB中的族,类,对象 VB.Net是面向对象(object-oriented)的,又称为物件(object)导向(oriented).在VB.Net中所有的变量类型都是基于object,而不是VariantDim x As Variant 会被升级为 Dim as object.如果你不理解对象,暂时你可以把他理解为一段数据,他是实际存在于内存的,所以对象以称为实例(instance)而类(class)就是类别,他定义一群对象,是一个对象的群体,并定义方法成员.所以

对象-JAVA中有关类的一个基础问题

问题描述 JAVA中有关类的一个基础问题 父类Father和子类Son,父类中有一个方法A,在子类中也定义了一模一样的一个方法A(具有与老方法相同的方法签名),那么在子类中那个A自然会把父类中的A给覆盖了.通过子类的对象调用方法A的时候,自然执行的是子类的A,通过父类的对象调用A的时候,自然执行的是父类的A,那么问题是:如果父类中有一个成员变量是子类Son,那么在父类中通过调用这个私有对象变量的方法A的时候, 是子类的A,还是父类的A? 解决方案 这么给你说吧,假如你实例化son,jvm会根据继

JS创建类和对象的两种不同方式_基础知识

在JavaScript中, 当你定义了一个新的函数, 你实际上声明了一个新的类, 而这个函数本身就相当于类的构造函数.下面的代码向你展示了两种不同的方式来创建一个新的Person类, 而Person.prototype的定义也紧跟在函数定义之后. var Person = function(name) { // 一个匿名函数, 并将这个函数赋值给一个Person变量, 此时Person成为一个类 this.name = name; } function Person(name) { // 直接定

php基础知识:类与对象(5) static_php技巧

Declaring class members or methods as static makes them accessible without needing an instantiation of the class. A member declared as static can not be accessed with an instantiated class object (though a static method can).  声明静态的类变量和方法可以不需要实例化类对象的

一步一步学习PHP(5) 类和对象_php基础

在这一节中,我们就来看看在PHP中如何创建一个类和对象. 1. 创建类 在PHP中,创建一个类和在C#/Java中基本类似,闲话少说,给大家看个最简单的例子: 复制代码 代码如下: <?php class People { var $name; public function GetName() { return $this->name; } public function SetName($name) { $this->name=$name; } } $p=new People();

PHP面向对象编程详解:类和对象

PHP面向对象编程详解:类和对象 从OOP的视角看,不应区分语言.无论是C++.无论是Java.无论是.net还有更多面向对象的语言,只要你了解了OO的真谛,便可以跨越语言,让你的思想轻松的跳跃.便没有对于Java..net.PHP 之间谁强谁弱的争执了. 希望这个介绍PHP5面向对象编程(OOP)的资料能让初学者受益,能让更多的PHPer开始转向OO的编程过程. 相对PHP4,PHP5在面向对象方面改变了很多.我们将只介绍PHP5环境下的面向对象.而我们必须改变自己来跟随PHP5的发展.如果代

C02-程序设计基础提高班(C++)第10周上机任务-类和对象之二

第10周:阅读教材第9章(p263-313),主要内容是构造和析构函数.对象数组.对象指针.共用数据的保护等,完成第10周上机任务: (回到C02-程序设计基础提高班(C++)学习安排) 实践任务: [任务1]设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化 #include<iostream> using namespace std; class Triangle {public: float perimeter(void);//计算三角形的周长 float area(void)

谈谈我对面向对象以及类与对象的理解

对于刚接触JAVA或者其他面向对象编程语言的朋友们来说,可能一开始都很难理解面向对象的概念以及类和对象的关系.笔者曾经带过一个短期培训班教授java入门基础,在最后结束课程的时候,还有很多同学不太理解面向对象的思维以及类与对象的意义.这几天有空,就想着整理整理自己的思路,谈谈自己对面向对象以及类与对象的理解. 面向对象 首先,一言不和先百度,得到如下定义: 一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类.继承,帮助人们实现对现实世界的抽象与数字建模. 我