2 3Public Sub Update()
! a) R) i& A8 T0 [ 4 MsgBox "Class2 Updated"
, p4 U3 ]7 W% v0 J 5End Sub, x* o) O: v5 E* w; k' ]! _
在使用的时候,可以使用以下方法,而实现一些设计模式:0 \2 v$ d1 }& H! @+ |5 N7 y0 I* P" i$ c
1Dim objTest As Variant
5 v }, |0 Z9 i' m5 Z 27 |" C' D# N! x4 S
3Dim objC1 As New Class1
6 Q4 [, q" Q5 M' w 4Set objTest = objC1
4 ?8 f' q' y/ z: n. J+ I3 _ 5objTest.Update' A# `# r( F, v! s: ^$ a
6
* H$ e# }# {9 t4 B" Z2 l. ] 7Dim objC2 As New Class20 K; a, k/ ]$ W3 [8 J) z r; r
8Set objTest = objC2
% G, {$ K6 W. K6 B" ^- S7 a 9objC2.Test' j$ A; w4 E3 \1 b! T! s
10- Q! F* H5 W2 P6 M& k
这样,无须继承机制,也可以得到抽象接口的优势,而使接口、实现分离。
6 ^, I2 w8 z. J! t 第二,在调用外部的COM自动化组件时,如Office,如果通过这种方式调用,对于不同版本的Office,如果你调用的方法、属性都是存在的,那么可以适应不同版本的Office,但如果通过前期绑定,在项目引用中确定对象类型,是有版本兼容问题的。
/ R, t* w; ] B/ Z# `* R 3. 效率和劣势' F9 K) m* m& V0 K* o9 Y3 @
其实最主要的劣势是效率问题,《Advanced Visual Basic 6》一书说,使用Variant变量和Long变量进行循环,效率差别是1.5倍,而没有别人认为的那么大,而且对于大对象,差别也不是很大。对于本文前边的例子,如果创建的是进程内对象,前期绑定和后期绑定调用效率差别大概2:3左右,也就是说也是1.5倍。对于调用Office这样的外部COM自动化对象,也许差别大一些,没有专门测试,不过对于Office自动化,速度主要是决定于Office本身的启动、初始化。
# R; B3 F2 v" D1 G5 T; L6 x 另外一个劣势是没有了IDE下的属性、方法成员自动列出。 v' Z- Z" o* \9 s
所以,个人认为,在使用VB6的时候,为了得到好的设计,有时不妨使用一些VB6的后期绑定的特性,来提高设计质量。 |