请问New 和 CreateObject的差别?

WinTalker 2003-05-13 09:32:27
在定义对象时我们可以写

Dim conn as New Adodb.Connection



也有碰到这样的

Dim conn as Object

set conn = CreateObject("sap.bapi")


请问,有New建立对象和用CreateObject建立对象有什么区别?
...全文
69 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Intelement 2003-05-13
在 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 操作符可以用于任何类。

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

如果使用 New 操作符创建 SingleUse 类的实例,对象将在当前的程序实例中创建,就好象其 Instancing 属性是 MultiUse。如果使用 CreateObject,则会启动部件的另一个实例。(请参阅“多进程的可扩展性:SingleUse 对象”)。


在使用每个对象一个线程或者循环线程池模型的多线程进程外部件中,使用 New 操作符创建的任何一个可在外部创建的类的实例都将共享执行 New 操作符的对象所在的线程;而使用 CreateObject 创建的实例将位于另一个线程上。


对于用于 Microsoft Transaction Services 的部件,工程中使用 New 操作符创建的任何一个可在外部创建的类的实例对 Microsoft Transaction Services 都是不可知的。用于 Microsoft Transaction Services 的对象必须使用 CreateObject 创建。
回复
bopite 2003-05-13
关注
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7491

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2003-05-13 09:32
社区公告
暂无公告