2016-09-20 118 views
7

VBA.Collection.Count olduğunu. o/a yöntemle yerine alıcı olmalıdır olabilir gibi 5 üyesindenNeden VBA <code>Collection</code> yöntemlerdir hepsi 5 üyesi var bir yöntem

, Count yöntem görünüyor.

Bu, VB6'nın ilk günlerinden kalma bir OOP/MS tasarım mirası mı? Koleksiyonun tasarımcıları, Count'un bir yöntem olması gerektiğinde bir zaman beklediler ve bir yöntem olarak Count'u belirtebilirler, böylece gelecekteki bazı davranış değişiklikleri arabirimi/COM? Jim Hewitt yorumların işaret ettiği gibi

DÜZENLEME, çevrimiçi dokümantasyon Count bir özellik olmakla birlikte, Nesne Tarayıcısı ve MIDL aksini iddia olduğunu göstermektedir.

İşte belgeleri var VB6 en bir koleksiyondaki nesne sayısını içeren Collection.Count Property

Uzun (uzun tamsayı) döndürür. Sadece oku.

Ama VB6 Nesne Tarayıcısı bunu gösterir: enter image description here

Ve Excel 2016 yılında , Count emin yalnız bakar ve bir alıcı olmak ister gibi ...

enter image description here

EDIT 22/Sep/16:

BenCollection.Count bir yöntemdir neden

Bu

tam açıklamıyor ... Bruce McKinney tarafından Visual Basic Hardcore 5'e geri sevk ama ben bilemez neden yanıtlayan bir şekilde gitmek yapar

bilinemez bilerek Açık::

şey bir sonraki sürümü için yanlış olacaktır muhtemelen bu sürümü için yanlış olabilir bir Koleksiyonu uygulanması hakkında bilmek ve düşünmek Collection.Count bir yöntemdir neden. Uygulama ayrıntıları üzerinde

:

Koleksiyon sınıf Visual Basic sürüm 4 ile sağlanan iyi 1 versiyonu oldu. Visual Basic sürüm 5 ile sağlanan Collection sınıfı iyi bir 2 sürüm değil. Kullanıcılar çok sayıda şikayet ve öneri sundular. Hiçbiri uygulanmadı.Koleksiyon On

:

bir Koleksiyonu nedir? Kullanıcı arayüzünü biliyorsunuz, ancak dahili veri yapısının çalışmasını ne işe yaradığını gerçekten bilmiyorsunuz. Normalde bu bir endişe değil. Çalıştığı sürece nasıl çalıştığı umurunda? Ancak, ikinci düşüncede, iç uygulama operasyonların verimliliğini etkilemek zorundadır. Bazı işlemler diğerlerinden daha az verimli ise, yavaş olanlardan kaçınmak hoş olabilir. Collection.Item günü

:

Visual Basic yapmış olabilir

[Collection.Item] [Bir özellik olarak] çalışırlar. (O istendi.)

+1

Koleksiyondaki öğe sayısı hiçbir zaman depolanmadığından ve sınıftan hiç bilinmediğinden ve bunu bilmenin tek yolu, tüm öğeler arasında yineleme yapmak ve bunları saymaktır. Bana garip görünmüyor ... Ve VBA'daki her şey VB6'nın mirası. .NET koleksiyonları bu şekilde çalışmıyor. –

+1

Şüphesiz, örneğini yineleme olmadan "Count" bilen bir iç alan var mı? – ThunderFrame

+0

Bahisim hayır, yok. Eğer bir tane olsaydı, Metod'un bir anlamı olmazdı ve dediğin gibi bir özellik olurdu. –

cevap

2

Bildiğim kadarıyla aslında bir yöntem olduğunu söyleyebilirim:

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

"neden" olsa beni kaçar.

+0

Gerçekten de, "neden" sorunun merkezi. – ThunderFrame

+1

@ThunderFrame Sanırım "neden" sadece Microsoft devleri tarafından cevap verebildi ... belki de muhtemelen aynı şeyi merak ediyordu, bu tozlu eski kod tabanına bakarak ... –

+0

marşlama giderlerini düşük tutmak için özellikler. Bu durumda bunu yapmak, genel bir uygulama olarak bunu uygulamaktan sadece alışkanlıktı. – Bob77