VB的集合对象(Collection)内的 Item的值为什么不能修改????????

fanziqiang2002 2001-12-16 12:45:27
Public a As New Collection
Public s As Variant
Private Sub Command1_Click()
s = "aaaaaaa"
a.Add s
a.Item(1) = "cccccc" '到了这一步, VB要求对象
End Sub


'VB的集合对象(Collection)内的 Item的值为什么不能修改??????,希望大侠能给于指点
...全文
679 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanziqiang2002 2001-12-22
  • 打赏
  • 举报
回复
那么又怎样从该集合获得此对象的引用,有现成的方法吗????
junglerover 2001-12-16
  • 打赏
  • 举报
回复
这里其实有较深层次的原因。涉及到VB中的
赋值语句 X=Y
和引用赋值语句 SET X=Y
的区别问题。

我们知道对简单数据类型变量应当使用赋值语句。其实VB中的一个X=Y隐含了许多操作,
包括先对该变量重新分配地址空间,然后填充值的操作。这也正是为什么你在VB中总
可以用一个简单的等于号就对字符串赋值,而在C里却不能这样做的原因。例如你连续
执行:
a="aaa"
a="bbb"
其实第二句之后的变量a地址跟第一句之后的已经毫无关系了。它并非在第一句时分配的
空间上将"aaa",改成"bbb",而是进行了释放原空间、分配新空间、重新填充的连续操作。

VB的集合添加元素时,并非将该元素复制一份,而是添加一个对它的引用。
你可以将每个集合元素理解为一个地址。而该地址一旦被加入集合,地址本身将不可
更改,但其内容可以更改。
因此,你对集合元素使用赋值语句,就是无法执行的了。

而对于对象变量,只有在每次NEW时才新分配空间,因此你将它添加到集合以后,
只要从该集合获得此对象的引用,就可以改变其值。
sxmzmxh 2001-12-16
  • 打赏
  • 举报
回复
可以先删除再增加
sandder 2001-12-16
  • 打赏
  • 举报
回复
不能就是不能!
就像为什么定义变量要用 Dim 这样
Mittermeyer 2001-12-16
  • 打赏
  • 举报
回复
Item是Collection的只读属性,就这么简单。
如果希望修改Item的值,那么只有先删除,在添加一次。

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧