我理解数组。我知道15年前的一些java,我知道类,对象,实例,变量,静态变量和构造函数。在VB中不太熟悉这些东西。
我不理解对象集合。
假设我绘制了一个listbox
,并将其命名为lstbox1
我看到我可以说lstbox1.items.item(0)
或lstbox1.items(0)
我可以说listbox1.items(0)
让我感到困惑的事实。如果一个对象集合不是一个数组,那么它显然也不是一个对象。
此链接https://msdn.microsoft.com/en-us/library/yb7y698k(v=vs.90).aspx表示Collection是一个对象。
但是那些items(0)项不是一个类,因此无法调用构造函数......而items不是一个方法,它是一个属性,它是一个对象集合的实例,所以我无法看到(0)是如何工作的......我知道它指的是第一个对象,索引为0的元素,但我不明白它是如何工作的。我知道如果blah是一个数组,blah(0)会起作用。我确信lstbox1.items不是一个对象集合数组,它只是一个对象集合。
它是一个像Array这样的数据结构,它有自己的语法..例如,可以说dim blah as Integer()
或dim blah() as Integer
,因此无需声明类Array就可以定义它。 ObjectCollection
有点像那样吗?它确实在它的实例之后允许(索引)。
答案 0 :(得分:1)
VB有一个名为Default Properties的概念。对于ItemCollection类型(以及许多其他类型),Item
属性是集合的默认属性。这允许您使用问题的速记。
它基本上只是一些语法糖。当您说lstbox1.items(0)
时,它只是lstbox1.items.item(0)
的缩写。
另外,不要将各种集合类型误认为是简单数组。它们具有相似的语法,但每种集合类型都有它自己的怪癖和用例,通常值得花时间查看您正在使用的特定类型的文档。不要假设某些东西是数组,只是因为你可以通过索引访问这些项目。
答案 1 :(得分:1)
将此视为"语言功能"。这就是所谓的索引器属性。它在vb.net中实现为默认属性。在c#中实现是不同的。它背后的数据结构可以是你想要的任何东西 - 数组,列表,字典,哈希表。事实是 - 它允许您通过提供参数而无需调用属性语法来访问某些内容。 myParentObject(1)
代替myParentObject.GetChildObject(1)
在VB中,必须索引默认属性。
listbox1
。 Items
。 item(0)
- > listbox1
- 具有属性Items
的主对象,它是一个集合。此集合具有属性item
,它是默认属性或索引器。 Item
是一个从底层集合中公开单个对象的属性。