Thu*_*ame 10 vb6 collections methods getter vba
所述VBA Collection具有5元,所有这些都是方法:Add,Count,Item,_NewEnum和Remove.
在5个成员中,该Count方法看起来可能/应该是getter而不是方法.
这是从VB6早期开始的OOP/MS设计的遗产吗?集合的设计者是否预期Count 可能需要成为一种方法,并将其指定Count为一种方法,以便将来某些行为改变不会破坏接口/ COM?
编辑正如Jim Hewitt在评论中指出的那样,在线文档表明这Count是一个属性,但是对象浏览器和MIDL建议不然.
这是VB6 属性的文档Collection.Count
返回包含集合中对象数的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);
};
Run Code Online (Sandbox Code Playgroud)
不过,“为什么”让我望而却步。