webForumDet fria alternativet

Standardmetod i klass

.NET

11 svar · 345 visningar · startad av Erik Juhlin

Medlem sedan maj 200010 687 inlägg
Frågan#1

Hur gör man så att en metod är standard för en klass? Som .Item är i Scripting.Dictionary...

Medlem sedan juni 20022 599 inlägg
#2

Nu är iofs Item en property snarare än en metod, men iaf:
Tools->Procedure Attributes->Advanced->Tryck sedan F1, för det finns en grej som är lätt att missförstå..

(Procedure Attributes är dimmat om du inte befinner dig inne i själva klasskoden.)

Medlem sedan maj 200010 687 inlägg
#3

F1 hjälper mig inte eftersom att jag inte har MSDN installerat. Kan du istället säga hur man gör?

Medlem sedan juni 20022 599 inlägg
#4

OK. Du väljer din property i övre combon och sätter Procedure ID till (Default). That's it.

(Det luriga är att det inte hjälper att kryssa i User Interface Default.)

Medlem sedan maj 200010 687 inlägg
#5

Tack!

Medlem sedan maj 200010 687 inlägg
#6

Hur gör man sen så att man med For Each ... In ... kan gå igenom min collection?

Medlem sedan okt. 20023 030 inlägg
#7
Dim Item as String

For Each Item In MinCollection
    '...
Next Item
Medlem sedan maj 200010 687 inlägg
#8

Men behöver jag inte ha vissa metoder i mitt collectionobjekt?

Medlem sedan okt. 20023 030 inlägg
#9

Nej. Det går att loopa igenom en collection sådär eftersom att den då använder Item som är standard i collection. :)

Medlem sedan juni 20022 599 inlägg
#10

Erik Juhlin skrev:

Men behöver jag inte ha vissa metoder i mitt collectionobjekt?

Du försöker alltså skriva en egen klass som uppför sig som en collection vad gäller for - each? Isåf är du antagligen rätt kokt, eftersom VB inte stöder klassarv. (Att skriva Implements Collection i klassen funkar inte heller eftersom Collection innehåller en metod _NewEnum som inte ens är ett tillåtet metodnamn i VB.)

Du blir nog tvungen att skriva klassen i nåt annat språk: VB.NET eller C++ tex.

Medlem sedan dec. 19991 072 inlägg
#11

Isåf är du antagligen rätt kokt

Vem är det som är kokt egentligen...? :)

Jodå, visst går det att skriva egna klasser som man kan köra For...Each på...

Public Property Get NewEnum() As IUnknown
     Set NewEnum = myCollection.[_NewEnum]
End Property

Gå sen in i menyn och välj "Procedure Attributes", i ProcedureID skriver du "-4", samt så måste du klicka i "Hide this member"

myCollection är alltså ett Collection-objekt som kan innehålla referenser till dina egna klasser.

Nu kan du köra For...Each på din klass och returnera det som finns i din collection.

Medlem sedan juni 20022 599 inlägg
#12

fredrik skrev:

Vem är det som är kokt egentligen...?

Tja, denna gången var det uppenbarligen jag. Du har naturligtvis helt rätt. När jag själv testade så provade jag att lägga till en funktion med namnet _NewEnum (duh!), vilket naturligtvis inte går att kompilera. Tricket är att sätta Procedure Id till -4. Tack.

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)