在 Visual Basic 部件中如何创建对象

在某些情况下,用来创建对象的方式(即 CreateObject,New 操作符,或用 As New 定义的变量)对对象的创建有细微的影响。这些影响取决于 Visual Basic 是否使用由部件对象模式 (COM) 提供的对象创建服务。

当创建由其它部件提供的类的对象时,Visual Basic 总是使用 COM 的对象创建服务。因此,当创建可以提供给外部的对象时,使用 New 操作符、As New 定义变量和 CreateObject 函数之间并没有什么区别。

CreateObject 函数总是使用 COM 的对象创建服务,无论是创建可以提供给外部的对象,还是创建自己编写的工程中的类的实例。所以对 CreateObject 而言,创建外部对象和创建内部对象也没有什么不同。

不过,如果使用 New 操作符(或者使用 As New 声明变量)来创建工程中的类的实例,Visual Basic 将使用 COM 对象创建的一种十分有效的私有实现方案。

换句话说,除了使用 New 或 As New 创建工程中的类的对象之外,Visual Basic 对所有的对象创建都使用同一种方式。可以总结为下表。

从...创建对象 使用 CreateObject 使用 New, As New
由其它部件提供的类 COM 的对象创建服务 COM 的对象创建服务
自己编写的工程中的类 COM 的对象创建服务 Visual Basic 的私有对象创建方法

注意 CreateObject 函数不能用于 Instancing 属性为 Private 或 PublicNotCreatable 的类。New 操作符可以用于任何类。

下面是一些有可能会产生细微差别的特定例子,这些细微差别取决于如何创建自编工程中的类的对象: