哪些数据类型导致对象集合的行为与它一样?

时间:2015-06-30 10:46:30

标签: vb.net

我理解数组。我知道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有点像那样吗?它确实在它的实例之后允许(索引)。

2 个答案:

答案 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中,必须索引默认属性。

listbox1Itemsitem(0) - > listbox1 - 具有属性Items的主对象,它是一个集合。此集合具有属性item,它是默认属性或索引器。 Item是一个从底层集合中公开单个对象的属性。