| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1074 人关注过本帖
标题:不能理解Set语句中有无New的区别?
取消只看楼主 加入收藏
VBhere
Rank: 2
等 级:论坛游民
帖 子:21
专家分:19
注 册:2010-3-9
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:3 
不能理解Set语句中有无New的区别?
以下是引用自VB MSDN的原文:

Set 语句
将对象引用赋给变量或属性。

语法
Set objectvar = {[New] objectexpression | Nothing}

Set 语句的语法包含下面部分:
部分 描述
objectvar 必需的。变量或属性的名称,遵循标准变量命名约定。
New 可选的。通常在声明时使用 New,以便可以隐式创建对象。如果 New 与 Set 一起使用,则将创建该类的一个新实例。如果 objectvar 包含了一个对象引用,则在赋新值时释放该引用。不能使用 New 关键字来创建任何内部数据类型的新实例,也不能创建从属对象。
objectexpression 必需的。由对象名,所声明的相同对象类型的其它变量,或者返回相同对象类型的函数或方法所组成的表达式。
Nothing 可选的。断绝 objectvar 与任何指定对象的关联。若没有其它变量指向 objectvar 原来所引用的对象,将其赋为 Nothing 会释放该对象所关联的所有系统及内存资源。

说明
为确保合法,objectvar 必须是与所赋对象相一致的对象类型。
Dim、Private、Public、ReDim以及 Static 语句都只声明了引用对象的变量。在用 Set 语句将变量赋为特定对象之前,该变量并没有引用任何实际的对象。
下面的示例说明了如何使用 Dim 来声明 Form1 类型的数组。Form1 实际上还没有实例。然后使用 Set 将新创建的 Form1 的实例的引用赋给 myChildForms 变量。在 MDI 应用程序中可以使用这些代码来创建子窗体。
Dim myChildForms(1 to 4) As Form1
Set myChildForms(1) = New Form1
Set myChildForms(2) = New Form1
Set myChildForms(3) = New Form1
Set myChildForms(4) = New Form1

通常,当使用 Set 将一个对象引用赋给变量时,并不是为该变量创建该对象的一份副本,而是创建该对象的一个引用。可以有多个对象变量引用同一个对象。因为这些变量只是该对象的引用,而不是对象的副本,因此对该对象的任何改动都会反应到所有引用该对象的变量。不过,如果在 Set 语句中使用 New 关键字,那么实际就会新建一个该对象的实例

问题:
(1)上边是MSDN的原文写的,但是我不能理解什么叫“就会新建一个该对象的实例”???

(2)上边的代码和我这样写的代码区别是什么?希望能举个合适的例子。
Dim myChildForms(1 To 4) As New Form1
Set myChildForms(1) = Form1
Set myChildForms(2) = Form1
Set myChildForms(3) = Form1
Set myChildForms(4) = Form1
搜索更多相关主题的帖子: New 语句 Set 
2010-03-24 15:53
VBhere
Rank: 2
等 级:论坛游民
帖 子:21
专家分:19
注 册:2010-3-9
收藏
得分:0 
我理解是这样的,不知都对不对啊。

Dim myChildForms(1 To 4) As New Form1  这一行就是声明了类型是Form1,并且分别设置了4个窗体,即myChildForms(1 To 4)。
所以这一行代码就等于了
Dim myChildForms(1 to 4) As Form1
Set myChildForms(1) = New Form1
Set myChildForms(2) = New Form1
Set myChildForms(3) = New Form1
Set myChildForms(4) = New Form1
这五行代码。


Set myChildForms(1) = Form1
Set myChildForms(2) = Form1
Set myChildForms(3) = Form1
Set myChildForms(4) = Form1
是把myChildForms(1 To 4)这4个变量都定义成了窗体Form1,等于是一个窗体4个名字。

不知道这样理解对吗?

另外再问一下Set语句有无New的区别?还是不理解?
“有New就会新建一个该对象的实例”,这个新建是指什么?设置?赋值?引用?声明?还是显示出来?
2010-03-24 17:18
VBhere
Rank: 2
等 级:论坛游民
帖 子:21
专家分:19
注 册:2010-3-9
收藏
得分:0 
回复 4楼 bczgvip
既然上边的5行代码可以用1行代码就能写成,那为什么还要有这样1行代码和5行代码的两种写法呢?
2010-03-24 19:58
VBhere
Rank: 2
等 级:论坛游民
帖 子:21
专家分:19
注 册:2010-3-9
收藏
得分:0 
明白了 谢谢
4楼的代码一点也没看懂,因为我还没仔细研究过类模块呢
2010-03-25 09:12
快速回复:不能理解Set语句中有无New的区别?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012358 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved