vb的module 和class module 有什么区别?

标准模块与类模块的比较  
   
   
  在数据存储方式上,类不同于标准模块。标准模块的数据不可能多于一份。这意味着若程序中某个部分改动了标准模块的公共变量,随后程序的其它部分读取该变量会得到该值。  
   
  相反,类模块数据则独立存在于每个类的实例中。  
   
  应避免使类中的代码依赖于全局数据─   即标准模块中的公共变量。一个类可能同时存在很多个实例,所有这些对象都共享部件中的全局数据。  
   
  静态的类数据  
  在类模块中使用全局变量不符合面向对象编程的封装概念,因为这种类创建的对象没有包含它所有的数据。不过,有时要让同一个类模块创建的所有对象共享一个数据成员。例如,一个类所创建的所有对象要共享一个属性值,如部件的名称或版本号。  
   
  这种对封装的故意违反有时称之为静态的类数据。通过使用   Property   过程设置并返回标准模块中的   Public   数据成员,就可以在   Visual   Basic   的类模块中实现静态的类数据,如下面代码段所示:  
   
  '返回应用程序名的只读   property。  
  Property   Get   ComponentName()   As   String  
        '变量   gstrComponentName   存储于标准模块中,声明为   Public。  
        ComponentName   =   gstrComponentName  
  End   Property  
  通过提供一个相关的   Property   Let   过程─   或对包含对象引用的属性使用   Property   Set   过程─   给标准模块中的数据成员赋新值,可以实现非只读的静态的类数据。  
   
  重点       在设计使用静态数据的类时,要考虑到所写的部件要为若干个客户端应用程序(如果是进程外部件)或者为一个客户端以及若干个进程内部件(如果是进程内部件)提供对象。即使该类创建的所有对象被不同的客户端使用,但都共享该静态数据。  
 
类模块和标准模块的比较    
   
   
  类模块和标准模块的不同点在于存储数据方法的不同。标准模块的数据只有一个备份。这意味着标准模块中一个公共变量的值改变以后,在后面的程序中再读取该变量时,它将得到同一个值。  
   
  而类模块的数据,是相对于类实例(也就是,由类创建的每一对象)而独立存在的。  
   
  同样的,标准模块中的数据在程序作用域内存在,也就是说,它存在于程序的存活期中;而类实例中的数据只存在于对象的存活期,它随对象的创建而创建,随对象的撤消而消失。  
   
  最后,当变量在标准模块中声明为   Public   时,则它在工程中任何地方都是可见的;而类模块中的   Public   变量,只有当对象变量含有对某一类实例的引用时才能访问。  
   
  上面的比较,同样适用于标准模块和类模块中的公共过程。用下面的例子可以说明。打开一个新   Standard   Exe   工程,并在“工程”菜单中个添加一个标准模块和一个类模块,然后运行以下的代码:  
   
  把下面的代码放在   Class1   中;  
   
  '下面是   Class1   对象的一个属性。  
  Public   Comment   As   String  
   
  '下面是   Class1   对象的一个方法。  
  Public   Sub   ShowComment()  
        MsgBox   Comment,   ,   gstrVisibleEverywhere  
  End   Sub  
  把下面的代码放在   Module1   中:  
   
  '标准模块中的代码是全局的。  
  Public   gstrVisibleEverywhere   As   String  
   
  Public   Sub   CallableAnywhere(ByVal   c1   As   Class1)  
        '下行改变一个全局变量,这是一个   Class1   实例的(属性)。  
              '只有传递给该过程的个别对象才受到影响。  
              c1.Comment   =   "Touched   by   a   global   function."  
  End   Sub  
  把两个命令按钮放在   Form1   上,并在   Form1   中添加以下的代码:  
   
  Private   mc1First   As   Class1  
  Private   mc1Second   As   Class1  
   
  Private   Sub   Form_Load()  
        '创建两个   Class1   类的实例。  
        Set   mc1First   =   New   Class1  
        Set   mc1Second   =   New   Class1  
        gstrVisibleEverywhere   =   "Global   string   data"  
  End   Sub  
   
  Private   Sub   Command1_Click()  
        Call   CallableAnywhere(mc1First)  
        mc1First.ShowComment  
  End   Sub  
   
  Private   Sub   Command2_Click()  
        mc1Second.ShowComment  
  End   Sub  
  按   F5   键,运行该工程。当   Form1   加载时,它创建两个   Class1   类实例,每个实例有自己的数据。同时,Form1   设置了下面全局变量   gstrVisibleEverywhere   的值。  
   
  按下   Command1,调用全局过程并传递引用给第一个   Class1   对象。全局过程设置   Comment   属性,然后   Command1   调用   ShowComment   方法显示该对象的数据。  
   
  正如图   9.6   所示,结果信息框演示了全局过程   CallableAnywhere   如何设置对象的   Comment   属性,而且全局字符串在   Class1   内部是可见的。  
   
  图   9.6   第一个   Class1   对象的信息框  
   
   
   
  按下   Command2,调用第二个   Class1   类实例的   ShowComment   方法。  
   
  如图   9.7   所示,两个对象都访问了全局字符串变量;然而,第二个对象的   Comment   属性是空的,因为对全局过程   CallableAnywhere   的调用只改变第一个对象的   Comment   属性。  
   
  图   9.7   第二个   Class1   对象的信息框  
   
   
   
  重点   要避免类的代码依赖于全局变量,也就是标准模块中的公共变量。一个类的许多实例可以同时存在,所有这些对象在程序中共享全局数据。  
   
  在类模块代码中使用全局变量也违背了面向对象封装的编程原则,因为由这样的类所创建的对象并没有包含它们的所有数据。  
   
  静态类数据  
  有时,希望由一个类模块所创建的一些对象共享某个数据项。这就是所谓的静态类数据。  
   
  不能在   Visual   Basic   类模块中实现真正的静态类数据。但是,通过使用   Property   过程在标准模块中设置及返回   Public   数据成员的值,可以仿真静态类数据。如以下的代码:  
   
  '只读属性返回应用程序的名字。  
  Property   Get   CommonString()   As   String  
        '变量   gstrVisibleEverywhere   保存在  
        '标准模块中,并声明为   Public。  
        CommonString   =   gstrVisibleEverywhere  
  End   Property  
  注意       在类模块中,对模块级的变量不能声明为   Static。Static   数据只能在过程中使用。  
   
  由   Property   Let   过程(对于含有对象引用的属性,使用   Property   Set)对标准模块数据成员赋予新的值,可以仿真非只读的静态类数据。然而,这种使用全局变量的方式违背了封装编程的原则,而且不推荐使用。  
   
  例如,变量   gstrVisibleEverywhere   可以在工程中任何地方赋值,甚至可以从别的类代码中赋值,只要该类具有   CommonString   属性。这样做能导致程序中非常微妙的错误。  
   
  详细信息       ActiveX   部件中的全局数据,与普通程序中的处理方式不同。   如果有   VBP   或   VBE,请参阅《部件工具指南》中的“创建   ActiveX   部件”,“部件设计的一般准则”中的“标准模块与类模块”。  
 
http://www.csdn.net/expert/Topic/453/453566.shtm
Visual   Basic   的代码存储在模块中。模块有三种类型:窗体、标准和类。  
   
  简单的应用程序可以只有一个窗体,应用程序的所有代码都驻留在窗体模块中。而当应用程序庞大复杂时,就要另加窗体。最终可能会发现在几个窗体中都有要执行的公共代码。因为不希望在两个窗体中重复代码,所以要创建一个独立模块,它包含实现公共代码的过程。独立模块应为标准模块。此后可以建立一个包含共享过程的模块库。  
   
  每个标准模块、类模块和窗体模块都可包含:    
   
  声明。可将常数、类型、变量和动态链接库   (DLL)   过程的声明放在窗体、类或标准模块的模块级。  
   
   
  过程。Sub、Function   或者   Property   过程包含可以作为单元来执行的代码片段。本章后面的“过程概述”一节中将讨论这些内容。    
  窗体模块  
  窗体模块(文件扩展名为   .FRM   )是大多数   Visual   Basic   应用程序的基础。窗体模块可以包含处理事件的过程、通用过程以及变量、常数、类型和外部过程的窗体级声明。如果要在文本编辑器中观察窗体模块,则还会看到窗体及其控件的描述,包括它们的属性设置值。写入窗体模块的代码是该窗体所属的具体应用程序专用的;它也可以引用该应用程序内的其它窗体或对象。  
   
  标准模块  
  标准模块(文件扩展名为   .BAS)是应用程序内其它模块访问的过程和声明的容器。它们可以包含变量、常数、类型、外部过程和全局过程的全局(在整个应用程序范围内有效的)声明或模块级声明。写入标准模块的代码不必绑在特定的应用程序上;如果不小心用名称引用窗体和控件,则在许多不同的应用程序中可以重用标准模块。  
   
  类模块  
  在   Visual   Basic   中类模块(文件扩展名为   .CLS)是面向对象编程的基础。可在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件、可显示窗体窗口。  
   
 
标准模块,就像一个全局公共的大仓库,什么全局函数,全局变量,全局常量,都往这里头仍;语法根窗体里的写法没什么不同,唯一不同的可能就是一个叫Sub   Main的过程,可以作整个工程的引导过程而已。  
   
  类模块,就像自家的小仓库,仅仅是类实例化的时候,才用到,里面的函数、变量、常量的作用域仅限于这个类拥有;语法有很多特殊的地方,比如,属性的写法,公有方法,私有方法,事件的写法,构造函数、析构函数、这些根类相关的冬冬。  
   
 
谢谢大家
一个类模块文件就是一个类的定义,且只能是一个类  
  一个标准模块却可以包含自定义的函数,过程,或全局变量等。对subclass的callback函数则必须放在标准模块中.  
  两者不可替代
 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
引用的描述,使用VB语言封装OCX可以完成以下任务: 1. 添加一个按钮到工具栏,并实现点击按钮后打印当前时间的功能; 2. 编写一个方法,接受一个姓名作为参数,并返回"Hello 参数"的字符串。 在VB中,可以创建一个Class Module来封装OCX的功能。首先,我们可以在Class Module中添加一个公有方法,用于打印当前时间。可以使用VB的DateTime.Now属性获取当前时间,并使用MsgBox函数弹出消息框显示时间。代码如下: ```vb Public Sub PrintCurrentTime() MsgBox DateTime.Now End Sub ``` 接下来,我们可以在Class Module中再添加一个公有方法,用于接收一个姓名参数,并返回"Hello 参数"的字符串。可以使用VB的字符串拼接功能,将参数和固定的字符串一起返回。代码如下: ```vb Public Function SayHello(ByVal name As String) As String SayHello = "Hello " & name & "!!" End Function ``` 通过以上代码,我们完成了使用VB封装OCX的功能。可以在需要的地方调用这些方法实现相应的功能。<span class="em">1</span> #### 引用[.reference_title] - *1* [VB简单ocx封装应用](https://download.csdn.net/download/u014331138/10843547)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值