/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Klassemoduler og Collections
Fra : Anton Vestergaard


Dato : 22-02-01 13:25

Hej
Jeg er lige begyndt at lege med klasser og collections (langt om længe).
Jeg ved bare ikke helt hvordan jeg gør det bedst muligt:

Jeg har en klasse (Objekt) som indeholder et underobjekt. Dette underobjekt
er af variabel
størrelse, alt afhængig af hvilken instans af objektet jeg opretter.

Eksempel:
Objektet hestevogn oprettes udfra klassen.
Til hestevognen knytter jeg et antal heste (Underobjekter). Disse
underobjekter har sine egne egenskaber, metoder o.s.v.

Jeg kan se at den bedste måde at gøre det på er at have en klasse der hedder
hestevogn og en klasse der hedder hest, MEN:
Hvordan håndterer jeg samlingen af heste i hestevogn? Skal jeg have et
collection indeni hestevogn (det tror jeg selv)?
I bekræftende fald, hvorledes tilgår jeg jeg så den collection udefra?
(Count, Add, Remove, Enum)!

Eller skal jeg lave en CollectionClass (Tror jeg nok det hedder!), således
at jeg ender op med 3 klasser:
Klassen: Hestevogn
Klassen: Hest
Klassen: Hestesamling

Og hvorledes kan jeg så gøre det?

Jeg håber der er nogen der kan hjælpe mig.

På forhånd tak.
Anton



 
 
Niels (23-02-2001)
Kommentar
Fra : Niels


Dato : 23-02-01 04:28

Hej

Som svar på det mere tekninske side af Collections klasser,
har jeg nedenfor lavet et eksempel hvordan man kan
lave en Collection klasse.

"Anton Vestergaard" <anton_dkNONO@hotmail.com> wrote in message
news:9730ef$c97$1@news.inet.tele.dk...
> Hej
> Jeg er lige begyndt at lege med klasser og collections (langt om længe).
> Jeg ved bare ikke helt hvordan jeg gør det bedst muligt:
>
> Jeg har en klasse (Objekt) som indeholder et underobjekt. Dette
underobjekt
> er af variabel
> størrelse, alt afhængig af hvilken instans af objektet jeg opretter.
>
> Eksempel:
> Objektet hestevogn oprettes udfra klassen.
> Til hestevognen knytter jeg et antal heste (Underobjekter). Disse
> underobjekter har sine egne egenskaber, metoder o.s.v.
>
> Jeg kan se at den bedste måde at gøre det på er at have en klasse der
hedder
> hestevogn og en klasse der hedder hest, MEN:
> Hvordan håndterer jeg samlingen af heste i hestevogn? Skal jeg have et
> collection indeni hestevogn (det tror jeg selv)?
> I bekræftende fald, hvorledes tilgår jeg jeg så den collection udefra?
> (Count, Add, Remove, Enum)!
>
> Eller skal jeg lave en CollectionClass (Tror jeg nok det hedder!), således
> at jeg ender op med 3 klasser:
> Klassen: Hestevogn
> Klassen: Hest
> Klassen: Hestesamling
>
> Og hvorledes kan jeg så gøre det?
>
> Jeg håber der er nogen der kan hjælpe mig.
>
> På forhånd tak.
> Anton

Option Explicit

Private InternCollection As Collection


Private Sub Class_Initialize()
Set InternCollection = New Collection
End Sub


Private Sub Class_Terminate()
Set InternCollection = Nothing
End Sub

Public Function Add(ItemObjekt As ItemClass, key As String) As ItemClass
' Man kan godt lave add funktionen så den
' ikke returnere noget. Men sådan her plejer
' jeg at lave den.

' ItemClass Er den type du gerne vil ha' ind i Collection
' Hvis du flere forskellige klasser i din collection, så
' skal man overvej at bruge Implements.

' Key tilpasser efter hvordan man hurtigst vil genfinde ItemClass

InternCollection.Add ItemObjekt, key

' En variant kunne være
' InternCollection.Add ItemObjekt, ItemObjekt.Key
' Hvor Objektet selv bestemme hvad dens key er. Dette
' er mange gange en fordel.

Set Add = ItemObjekt
End Function

Public Function Count() As Long
Count = InternCollection.Count
End Function

Public Sub Clear()
InternCollection.Count
End Sub

Public Function Item(index As Variant) As ItemClass
' Husk index både kan være key og index. (her
' kan man igen indskræke til nettop sit behov)

' Jeg kan ikke lide at en collection rejser en
' fejl når den ikke kan finde Item'et
' Så derfor returnere jeg Nothing hvis jeg ikke
' finder noget.
On Error GoTo Findes_ikke

Set Item = InternCollection.Item(index)

Exit Function

Findes_ikke:
' Denne error handling kan laves pænere
Err.Clear
Set Item = Nothing
End Function

' For at få For Each til at virke, skal man
' implementere følgende funktion
Public Function NewEnum() As IUnknown
' Når man har lavet denne funktion, gør så følgende:
' 1) Vælg menupunkt Tools -> Procedure Attriutes
' 2) I vælg funktionen NewEnum
' 3) Tryk på Advanced
' 4) Vælg: Hide this member
' 5) I textbox'en Procedure ID overskrives (None) med -4
' (Det ser måske lidt mærkeligt ud, men det virker

Set NewEnum = Collection.[_NewEnum]
End Function


Mvh

Niels G




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408897
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste