VBA Collection
有5名成员,所有成员都是方法:Add
,Count
,Item
,_NewEnum
和Remove
。
在5个成员中,Count
方法看起来可能/应该是吸气剂而不是方法。
这是从VB6早期开始的OOP / MS设计的遗产吗?集合的设计者是否预期Count
可能需要成为一种方法,并指定Count
作为一种方法,以便未来的一些行为改变不会破坏接口/ COM?
编辑正如Jim Hewitt在评论中指出的那样,在线文档表明Count
是一个属性,但是对象浏览器和MIDL建议不然。
这是VB6的Collection.Count
Property的文档
返回包含集合中对象数的Long(长整数)。只读。
在Excel 2016中,Count
肯定看起来很孤独,喜欢它想成为一个吸气者......
编辑22 / Sep / 16:
我回想起Bruce McKinney的Hardcore Visual Basic 5 ......
这并没有完全解释为什么Collection.Count
是一种方法,但它确实在某种程度上回答了为什么我不知道为什么Collection.Count
是一种方法:
知道不可知的:
你认为你对集合的实现知道的任何东西都可能是错误的,对于这个版本来说可能是错误的。
关于实施细节:
随Visual Basic版本4提供的Collection类是一个很好的1版本。随Visual Basic版本5提供的Collection类不是一个好的2版本。用户提出了许多抱怨和建议。它们都没有实施。
关于收藏:
什么是收藏品?您知道它的用户界面,但您实际上并不知道内部数据结构是如何工作的。通常情况下,这不是一个问题。只要有效,谁在乎它是如何工作的?但是,第二个想法,内部实施必然会影响运营效率。如果某些操作的效率低于其他操作,那么避免慢速操作可能会很好。
在Collection.Item
:
Visual Basic可以使[
Collection.Item
]工作[作为属性]。 (有人要求。)
据我所知,它实际上是一种方法:
[
odl,
uuid(A4C46780-499F-101B-BB78-00AA00383CBB),
helpcontext(0x000f7886),
hidden,
dual,
oleautomation
]
interface _Collection : IDispatch {
[id(00000000), helpcontext(0x000f7903)]
HRESULT Item(
[in] VARIANT* Index,
[out, retval] VARIANT* pvarRet);
[id(0x00000001), helpcontext(0x000f7901)]
HRESULT Add(
[in] VARIANT* Item,
[in, optional] VARIANT* Key,
[in, optional] VARIANT* Before,
[in, optional] VARIANT* After);
[id(0x00000002), helpcontext(0x000f7902)]
HRESULT Count([out, retval] long* pi4);
[id(0x00000003), helpcontext(0x000f7904)]
HRESULT Remove([in] VARIANT* Index);
[id(0xfffffffc)]
HRESULT _NewEnum([out, retval] IUnknown** ppunk);
};
尽管如此,“为什么”逃脱了我。