为什么VBA.Collection.Count是一个方法

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(长整数).只读.

但是VB6对象浏览器显示了这个: 在此输入图像描述

在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]工作[作为属性].(有人要求.)

Bob*_*b77 5

据我所知,它实际上是一种方法:

[
  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)

不过,“为什么”让我望而却步。

  • @ThunderFrame 我认为“为什么”只能由微软开发人员回答......他们可能也想知道完全相同的事情,看着尘土飞扬的旧代码库...... (2认同)