mdbl_augend = vNewValue
End If
End Property
二、 给组件添加属性和方法的其他途径
1.添加属性最简单的一种方法:添加公共变量,如上例最简单的代码如下:
Option Explicit
Public augend As Double ‘ 添加 augend 属性
Public addend As Double ‘ 添加 addend 属性
Public Function Plus() As Double
Plus = augend + addend
End Function
但是,该方法只能设置可读/写属性,且不能对所赋值进行校验。如果仅需添加只读属性:在上例中,删除Public Property Let augend(ByVal vNewValue As Double)过程,则augend便成了一只读属性,不能赋值。当然,若要添加只写属性,只需删除Property Get过程就可以了。
2.使用类生成器实用工具
VB6中还有一个添加属性和方法的工具:在“外接程序”菜单中,单击“外接程序管理器”,在跳出的外接程序管理器对话框中选择“VB Class Builder Utility”,并在加载行为中选择“加载/卸载”(如图4)。然后再在“外接程序”菜单中单击“类生成器实用工具”,您一看就会用。
三、 告诉你几个要注意的问题
1. 上面的例子是一个简单得不能再简单的组件,比较实用的组件一般都至少还有一个模块(Module)。
2. 如果不小心, Visual Basic 可产生“单线程”组件。
也许最常见的一个陷阱就是使用了没有被设计为在 ASP 下运行的组件,如“单线程”组件。因此,请确保在“项目属性”页的“通用”选项卡上将线程模块设置为“单元线程”。
3. 关于“类型不匹配”错误。
一个好的建议是最好声明 Out 参数为 Variant,注意上例中没有这样设置。
4. 关于全局变量的使用。
尽量避免在组件中使用全局变量。在 Visual Basic 术语中,这表示在标准的 .BAS 模块中没有 Public 或 Global 变量。因为Global 变量并不是真正意义上的全局。每个线程都有自己的副本,如果几种方法恰好在同一线程中执行,它们将看到相同的变量;否则它们访问的是这些变量的不同副本。这意味着您可能给一个全局变量赋了值(在线程 A 中),但其另一个用户(在线程 B 中执行)看不到新值。其原因是 Visual Basic 内部使用“线程本地存储 (TLS)”来引用全局变量。这意味着每个线程都有自己的 Public 变量的副本,并且因为它存在多个副本,全局数据并不是真正“全局的”。也就是说,恰好在同一线程中运行的用户才会访问到同一个变量,不论他们是否期望如此。
最后顺便提一下,VB6.0引入了一种全新的Visual Basic应用程序:IIS应用程序。你可以象创建ActiveX DLL一样创建IIS应用程序,任何用Active Server Pages创建的应用程序都可以在VB开发环境中创建,你可以用单个的VB应用程序完全替代所有的Active Server Pages。