模块与类模块的区别.docx
《模块与类模块的区别.docx》由会员分享,可在线阅读,更多相关《模块与类模块的区别.docx(10页珍藏版)》请在冰豆网上搜索。
![模块与类模块的区别.docx](https://file1.bdocx.com/fileroot1/2023-6/14/7002475c-a282-4865-8d26-ef7b378d2cb9/7002475c-a282-4865-8d26-ef7b378d2cb91.gif)
模块与类模块的区别
模块与类模块的区别?
c:
\iknow\docshare\data\cur_work\分享到人人网
VB的代码存储在模块中。
在VB中提供了三种类型的模块:
窗体模块、标准模块和类模块。
简单的应用程序可以只有一个窗体,所用的程序都驻留在窗体模块中,而当应用程序庞大复杂时,就要另外附加窗体。
最终可能有几个窗体中有一些共同都要执行的代码,为了在两个窗体中不产生重复代码,可创建一个独立的模块,用它实现代码公用。
该独立模块即是标准模块。
此外还可以建立包含共享代码与数据的类模块。
每个标准模块、类模块和窗体模块可包含:
声明。
可将常数、类型、变量和动态链接库(DLL)过程的声明放在窗体、类或标准模块的声明部分。
每个模块只有一个声明部分
过程。
每个模块可有多个过程,过程是划分VB代码的最小单元,每个过程是一个可执行的代码片段。
VB中主要有子过程、函数过程或者属性过程等
各种模块类型
1.窗体模块
由于VB是面向对象的应用程序开发工具,所以应用程序的代码结构就是该程序在屏幕上表示的对应模型。
根据定义,对象包含数据和代码。
应用程序中的每个窗体都有一个相对应的窗体模块(文件扩展名为.frm)
窗体模块是VB应用程序的基础。
窗体模块可以包含处理事件的过程、通用过程以及变量、常数、自定义类型和外部过程的窗体级声明。
写入窗体模块的代码是该窗体所属的具体应用程序专用的;也可以引用该程序内的其它窗体和对象
每个窗体模块都包含事件过程,在事件过程中有为响应该事件而执行的程序段。
窗体可包含控件。
在窗体模块中,对窗体上的每个控件都有一个对应的事件过程集。
除了事件过程,窗体模块还可包含通用过程,它对来自该窗体中任何事件过程的调用都作出响应。
2.标准模块
标准模块是程序中的一个独立容器,包含全局变量、Function(函数)过程和Sub过程(子过程)。
可将那些与特定窗体或控件无关的代码放入标准模块中。
标准模块中包含应用程序内的允许其它模块访问的过程和声明。
它们可以包含变量、常数、类型、外部过程和全局声明或模块级声明。
写入标准模块的代码不必固定在特定的应用程序上;
(1)使用标准模块
在编写程序时,很可能会遇到一些使用相同变量和例程的窗体和事件过程。
在缺省状态下,变量对于事件过程来说是局部的,就是说仅能在创建这些变量的事件过程中读取或者修改变量。
与之相似,事件过程对于创建它们的窗体来说也是局部。
为了在工程中的所有窗体和事件中共享变量和过程,需要在该工程的一个或多个标准模块中对它们进行声明和定义。
标准模块或代码模块是具有文件扩展名.bas,并包含能够在程序任何地方使用的变量和过程的特殊文件。
正如窗体一样,标准模块被单独列在Project(工程)窗口内,并可通过使用File(文件)菜单中的SaveModulelAs菜单项存盘。
但是,与窗体不同,标准模块不包含对象或属性设置而只包含可在代码窗口中显示和编辑的代码。
(2)创建标准模块
如要在程序中创建新的标准模块,那么单击工具条AddForm(添加窗体)按钮上的下箭头并单击Mode(模块),或者单击Project(工程)菜单中的AddModule(添加模块)菜单项。
在工程中创建一个空的标准模块的步骤如下:
S1:
启动VB,打开一个新的标准工程,单击工程菜单中的AddModule菜单项,单击Open按钮。
VB在工程中增加一个名为Module的标准模块。
该模块对应的代码窗口被打开,对象和过程列表框的内容表明该标准模块的通用声明已被打开。
在此所声明的变量与过程在整个程序都可以使用。
S2:
双击工程资源管理器窗口的标题条,以便能看到整个工程资源管理器窗口,
S3:
在File(文件)菜单中,单击SaveModulelAs
S4:
如果D:
/VB6sbs/less10文件夹未被选择时,选择该文件夹,键入MyTestMod.bas,然后按回车。
该标准模块作为MyTestMod.bas文件保存到磁盘,并且可以通过Project(工程)的AddFile菜单项可将此文件通过其文件名加载到另一个工程中。
S5:
双击Project(属性)窗口标题条。
由于模块不包含对象,因此它惟一的属性就是Name
S6:
将Name属性改为modVariables,然后按ENTER键。
(3)声明公用变量
在标准模块中声明全局变量十分简单,键入关键字Public,后跟该变量名。
缺省状态下,公用就量在模块中被声明为变体类型,但是可以通过使用As关键字来指定相应类型,可以把公用变量声明为某个指定的基本类型。
3.类模块
在VB中类模块是面向对象编程的基础。
可以在类模块中编写代码建立新对象。
这些新对象可以包含自定义的属性和方法。
实际上,窗体正是这样一种类模块,在其上可安放控件,可显示窗体窗口
用类模块创建对象,这些对象可被应用程序内的过程调用。
标准模块只包含代码,而类模块包含代码又包含数据,可视为没有物理表示的控件。
模块设计的考虑
在VB中创建应用程序的最重要的部分是设计阶段。
首先需要为应用程序设计一个用户界面,这个界面的设计比较容易确定。
但设计代码的结构就是一项较复杂的工作。
构造应用程序的方法不同,可能会造成应用程序的性能以及代码的可维护性,可使用性不同。
VB应用程序呈层次结构。
典型应用程序包括若干个模块:
应用程序中每个窗体的窗体模块、共享代码的标准模块和类模块。
每个模块包含若干含有代码的过程:
Event过程,Sub过程或Function过程及Property过程。
在很多情况中都存在着多个对象共享的重复过程。
这种情况最好创建一个共享的子过程,使大家都可以调用它。
即使将来修改这些子程序,则只在一个地方修改就可进行全部修改,这将大大提高程序的可读性和可维护性。
可以把所有的共享操作放在标准的模块中。
标准模块
标准模块(文件扩展名为.BAS)是应用程序内其它模块访问的过程和声明的容器。
它们可以包含变量、常数、类型、外部过程和全局过程的全局(在整个应用程序范围内有效的)声明或模块级声明。
写入标准模块的代码不必绑在特定的应用程序上;如果不小心用名称引用窗体和控件,则在许多不同的应用程序中可以重用标准模块。
类模块
在VisualBasic中类模块(文件扩展名为.CLS)是面向对象编程的基础。
可在类模块中编写代码建立新对象。
这些新对象可以包含自定义的属性和方法。
实际上,窗体正是这样一种类模块,在其上可安放控件、可显示窗体窗口。
momofufu
检举
给你简单举几个例子:
'--以下为模块内容
PublicSubtest1(aAsInteger,bAsInteger)'带参数的模块
MsgBoxa+bEndSub
Functiontest2(aAsInteger,bAsInteger)AsInteger'有返回值的模块
test2=a+b'计算a,b相加的值返回结果
EndFunction'以下为窗体代码3个command
PrivateSubCommand1_Click()test15,6'使用test1模块
EndSub
PrivateSubCommand2_Click()'有返回值的模块使用MsgBoxtest2(3,9)
EndSub
vb类模块如何使用模块内容...
比如模块名为Global(Public)SubAspToDll_Initialize()
''''''''''''''
EndSub
类模块名为MyclassPrivateSubClass_Initialize()
SetAspToDll_Object=Me '当类模块引用模块为名是Me
而不是Global AspToDll_Initialize
EndSub小弟新手不懂,帮忙解释下
lengxfy
采纳率:
47% 4级
检举
Myclass是一个类,类需要实例化才能使用什么是实例化,我估计你不懂这样理解,你把一个游戏装到电脑上,这个游戏就是一个类你双击打开它,就算是一个实例,再打开一个,又是一个实例虽然你打开两次,但是两个游戏窗口是独立的,输了一个,不影响另一个,可能是赢的你在模块中,首先要定义一个类的实例名,你的代码中是AspToDll_Object这里面的ME,就是自己的意思,每个类被实例化了之后,就像一个人一样,有各种属性,Me就是英语自己。
就像刚才的两个游戏窗口,第一个里面可以叫自己是A,第二个可以叫自己是B,但是在自己的窗口说自己,就一定是A自己或者B自己,我说的不是网游,可以理解为一次性的游戏,打完输入玩家名字,记录成绩的那种而在类里面调用模块内容,就很简单,直接调用模块中的函数名就行了上面的代码中,是直接调用了初始化的函数AspToDll_Initialize类的化,需要名字.函数名。
比如说,模块中调用AspToDll_Object.函数名。
类模块自己调用自己,就不需要了,直接写就行了,就像欠想动一下,只要脑子里面想一下就行了。
而别人要你动,就要说,某某某,动一下。
看明白了么?
VB类模块属性问题
wkh2019 3级 被浏览5次
为什么要用LET和GET来对属性进行处理呢?
直接在类模块通用段声明不就行了吗?
两者有什么分别?
例如有模块clsPnt在通用声明publicxasinteger使用时可以用Pnt.x=123赋值同时也可以直接Pnt.x来获取X值但为什么我看到很多代码都是把x定义成private,然后加Let方法来赋值,再用Get方法来获取呢?
这样不是很麻烦么?
检举
这样可以防止不可预料的赋值
求个VB类模块使用例子
检举
本示例演示了如何用类模块定义类(然后可以用它创建对象)。
还将展示如何为新的类创建属性和方法并演示对象是如何创建和撤消的。
打开一个新的“标准EXE”工程,在“工程”菜单中选中“添加类模块”插入一个类模块。
在窗体上画四个按钮。
下表列出了本示例中要设置的对象属性值。
对象属性设置值Class类模块NameThingCommand1Caption显示该ThingCommand2Caption颠倒该Thing的名称Command3Caption创建新的ThingCommand4Caption临时的Thing注意类模块保存在扩展名为.cls的文件中。
添加下列代码到类模块的声明段:
OptionExplicitPublicNameAsStringPrivatemdtmCreatedAsDate变量Name将成为Thing对象的属性,因为它声明为Public。
注意不要把这个Name属性和上表设置的类模块的Name属性混淆(类模块的Name属性为Thing类提供了名称)。
为什么要给Thing类命名呢?
最好应该反过来问,为什么不?
应该给Thing类一个名称因为事物总是有名称的!
应该知道VisualBasic使用属性和方法的名称并没有什么特殊点。
可以为自己不同的类使用相同的属性和方法名。
变量mdtmCreated是私有数据成员,用于存储只读的Created属性的值。
Created属性返回Thing对象产生的日期和时间。
为了实现Created属性,将以下PropertyGet代码添加到类模块的声明部分:
PropertyGetCreated()AsDateCreated=mdtmCreatedEndProperty注意如果通过“工具”菜单下的“添加过程”对话框添加属性过程,应确认删除了PropertyLet声明,它是通过本对话框自动添加的。
PropertyLet只用于读写属性,参见“运用属性过程”部分。
Thing对象有一个方法ReverseName,用于颠倒Name属性的字母顺序。
它不返回值,因此是一个Sub过程。
向类模块添加以下Sub过程。
PublicSubReverseName()DimintCtAsIntegerDimstrNewAsStringForintCt=1ToLen(Name)strNew=Mid$(Name,intCt,1)&strNewNextName=strNewEndSub类模块有两个事件:
Initialize和Terminate。
从类模块的“对象”下拉列表中,选择“类”。
下拉出的“过程”列表将显示事件。
将以下代码放到事件过程中:
PrivateSubClass_Initialize()'设置对象创建的日期/时间,'由只读的Created属性返回。
mdtmCreated=Now'显示对象属性。
MsgBox"Name:
"&Name&vbCrLf&"Created:
"_&Created,,"ThingInitialize"EndSubPrivateSubClass_Terminate()'显示对象属性。
MsgBox"Name:
"&Name&vbCrLf&"Created:
"_&Created,,"ThingTerminate"EndSub一般Initialize事件包含了对象创建时所需的所有代码,如为Created属性提供时间标记。
Terminate事件包含撤消对象后进行清理的所有代码。
本示例中,两个事件主要用来提供Thing对象创建或撤消的可视化指示。
Thing对象的使用添加以下代码到窗体模块的声明段:
OptionExplicitPrivatemthAsThing变量mth保存了对一个Thing对象的引用,该对象是在窗体的Load事件中产生的。
将以下代码分别添加到Form_Load事件过程及四个按钮的Click事件过程中。
PrivateSubForm_Load()Setmth=NewThingmth.Name=InputBox("EnteranamefortheThing")EndSub'按钮“显示该Thing”PrivateSubCommand1_Click()MsgBox"Name:
"&mth.Name&vbCrLf_&"Created:
"&mth.Created,,"FormThing"EndSub'按钮“颠倒该Thing的名称”PrivateSubCommand2_Click()mth.ReverseName'单击“显示该Thing”Command1.Value=TrueEndSub'按钮“创建新的Thing”PrivateSubCommand3_Click()Setmth=NewThingmth.Name=InputBox(_"EnteranameforthenewThing")EndSub'按钮“临时的Thing”。
PrivateSubCommand4_Click()DimthTempAsNewThingthTemp.Name=InputBox(_"EnteranamefortheTemporaryThing")EndSub运行工程按F5键运行该工程。
观察Form_Load事件过程可知New操作符用于创建Thing对象。
对该对象的引用赋给了变量mth。
InputBox函数要求输入Thing的名称。
输入名称并按ENTER键后,返回值被赋予Thing对象的Name属性。
显示窗体Thing可以通过按下第一个按钮“显示该Thing”来验证所赋的Name属性值,此时将显示一个包含了Thing对象所有属性的消息框。
颠倒Thing的名称按第二个按钮“颠倒该Thing的名称”。
该按钮调用ReverseName方法把Thing对象的名称倒过来,然后按第一个按钮显示更新过的属性值。
创建新的Thing单击“创建新的Thing”按钮撤消已存在的Thing对象后再创建一个新的对象。
(或,反过来进行,创建一个新的Thing对象然后撤消旧的。
)New操作符创建一个新的Thing,因此可以看见新Thing的Initialize事件显示的消息框。
单击“确定”,对新Thing的引用被赋给了窗体级的变量mth。
这样做清除了对旧的Thing的引用。
由于不再有引用,所以它被撤消,因此可以看到Terminate事件的消息框。
单击“确定”后,InputBox语句要求输入新Thing的名称。
注意如果希望在创建新的Thing之前撤消旧的,可以添加代码Setmth=Nothing到事件过程的开始部分。
临时的Thing第四个按钮演示了对象存活期的另一个方面。
按下后,将提示输入临时Thing的名称。
可是等一等,这还不是一个临时的Thing对象。
还没有见到其Initialize消息框,怎么赋给它名称呢?
由于变量thTemp已被AsNew声明过了,因此当一个属性或方法被使用时就会创建Thing对象。
这将发生在输入框返回的值被赋给Name属性时。
在输入框键入名称后单击“确定”。
此时可以看到Initialize的消息框,其中的Name属性还是空白。
当单击“确定”关闭消息框后,InputBox语句的值终于赋给了Name属性。
看看这一行代码作了多少事。
当然,当完成了这一切后,Click事件过程也结束了,变量thTemp也超出可见范围,对临时Thing的对象引用也被释放,因此可以看到Thing的Terminate消息框,注意其中包含所提供的名称。
每次单击该按钮将创建另一个临时Thing,并进行命名,将它撤消。
关闭程序单击窗体的“关闭”按钮可终止应用程序。
不要使用工具栏上的End按钮。
应用程序终止时,Form1被撤消。
变量mth也超出可见范围,VisualBasic清除对Thing的引用。
由于已不存在对Thing的引用,因此被撤消并显示Terminate事件的消息框。
再次运行应用程序,这次用工具栏上的End按钮终止程序。
注意这时没有显示Thing对象的Terminate消息框。
应特别记住使用End按钮终止应用程序或在代码中用End语句立即退出应用程序,并不能运行任何对象的Terminate事件。
最好能通过卸载所有的窗体来关闭应用程序。
通过F8键以每次运行一行代码的形式运行示例,是一个很有用的方法。
这有利于理解创建和撤消对象的事件的顺序。
重点在实际的应用程序中,Initialize和Terminate事件不应包含消息框或其它任何使Windows显示消息的代码。
一般来说,调试对象的存活期时最好用Debug.Print语句。
类模块与标准模块的区别
标准模块和类模块的区别:
1标准模块实际上就是一个存放着变量和过程的一个单获的文件,它是非对象化的,而类模块是一个自定义的类,主要是通过面向对象的。
2标准模块和类模块的存储数据方法不同。
标准模块的数据只有一个备份,每次读取时都是相同的值,而类模块中的数据是相对于类模块获立存在的。
3当变量在标准模块中声明为Public时,则它在工程中任何地方是可见的;而类模块中的Public变量,只有当对象变量含有对某一类实例的引用时才能访问。
4类模块必须要先在程序里进行引用,然后才可以使用。
而公共模块则不须要进行引用,就可以直接使用。
5类模块是集结了公共模块中具有相同的方法或属性的模块内容。
类模块主要是用来把一些经常要用到的操作结合在一起,和模块不同的是,他的内容都是和一种对象有关的
类模块运用得好的话可以方便很多很多(用过MFC编程就会很清楚)
类模块很像结构体,不同的是,类模块的成员还可以有函数(在MFC中,结构体就是一个特殊的类)
例子的话我就不会写了,VB没学类模块,是我的遗憾
大概说说就可以>_<
比如有个动物园的程序,里面有很多动物
但每个动物都要做相同的动作:
吃饭,睡觉
然后你就可以在类模块(假设一个叫Amimal的类)里
写好吃饭(eat()),睡觉(sleep())的函数(就是吃饭是要怎么做,睡觉时要怎么做)
然后把动物定义为那个类
定义我还是会的:
dimMonkeyasNewAnimal
dimDogasNewAnimal
然后就可以调用Animal的函数了
Monkey.sleep()'这样,Monkey就会去"睡觉"了
Dog.eat()
控件也是一个类,不过你看不到它的类模块而已
Text1.text="abc"'Text1是TextBox这个类的,而TextBox里有个叫text的成员
本人表达能力不好,不懂可以来找我
评论(0)40
其他回答
(1)
风画犹诗 6级 2008-08-22
1、模块是.bas文件,主要用于将代码分别存放,便于管理。
类模块是.cls文件,主要用于定义类和设计ActiveXEXE、ActiveXDLL。
在VB中选择“工程|添加类模块”就可以在工程中加入一个类模块。
然后,可以使用菜单中的“添加过程”命令添加属性、方法和事件。
评论(0)0