Toon posts:

[VB6] Eigenaardigheid Property Let/Get

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor een bepaald programma heb ik een class die eigenlijk alleen dient als data opslag. Een instance van deze klasse heeft een waarde (true/false), een id en een group. Deze 3 eigenschappen moeten door andere classes kunnen worden ingesteld. Zo heb ik het nu opgelos: (voorbeeld voor 1 eigenschap):
Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
Option Explicit
Private myGroup as integer

Public Property Let Group(Group As Integer)
    myGroup = Group
End Property

Public Property Get Group() As Integer
    Group = myGroup
End Property

Wanneer ik nu de code draai krijgt de class 2 privates voor deze eigenschap namelijk: myGroup en Group. Beide hebben ook dezelfde waarde. :?

Googlen en MSDN leveren geen antwoord op mijn probleem.
Hoe kan ik dit oplossen?

[ Voor 5% gewijzigd door Verwijderd op 27-08-2003 07:38 ]


  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Dat je 2 privates krijgt, dat snap ik niet helemaal, maar dat ze beiden dezelfde waarden krijgen klopt wel.
Met Group LET je namelijk MyGroup waardoor ze dezelfde waarde krijgen.

| Life is a game (and games are fun) | homepage |


  • guyvdn
  • Registratie: Maart 2003
  • Laatst online: 18-06 20:15

guyvdn

Eagle

Als je er nu eens van maakt
code:
1
2
Public Property Let Group(intValue As Integer)
   myGroup = intValue
dan ben je tenminste zeker dat hij de juiste waarde gaat gebruiken en niet in een lus terecht komt.

To deny our own impulses is to deny the very thing that makes us human


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21-08 18:33
Je hebt idd je parameter dezelfde naam gegeven als je property. Das niet zo handig ....

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
Daar had ik zelf ook al aan gedacht, maakt echter geen verschil. Als ik de class @ run-time bekijk met een watch heeft deze twee waarden onder zich hangen: myGroup als integer en Group als integer. De code van mijn testprog is nu als volgt:
Visual Basic 6:
1
2
3
4
5
6
7
8
9
Private myGroup As Integer

Public Property Let Group(intValue As Integer)
    myGroup = intValue
End Property

Public Property Get Group() As Integer
    Group = myGroup
End Property

Als ik nu een instance van de class trek, dan bezit deze zowel Group als myGroup als variabele...

@Farlane: I know >:)

[ Voor 3% gewijzigd door Verwijderd op 27-08-2003 10:36 ]


Verwijderd

The easy way out met de vb class builder:


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit

'local variable(s) to hold property value(s)
Private mvarGroup As Integer 'local copy

Public Property Let Group(ByVal vData As Integer)
'used when assigning a value to the property, on the left side of an assignment.
'Syntax: X.Group = 5
    mvarGroup = vData
End Property


Public Property Get Group() As Integer
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.Group
    Group = mvarGroup
End Property


En op
Als ik de class @ run-time bekijk met een watch heeft deze twee waarden onder zich hangen: myGroup als integer en Group als integer. De code van mijn testprog is nu als volgt ....

Als ik nu een instance van de class trek, dan bezit deze zowel Group als myGroup als variabele...
Dat is ook logisch want als je de property instelt (let) dan wijs je je integer value toe aan je member variabele, als je je property opvraagt, dan refereert die property naar die member variabele, dus natuurlijk hebben ze dezelfde value.

Een property is gewoon een 'deurtje' naar je member variabele.
Het doel van de property is dat je eventuele code kan integreren, waardoor de integriteit van de class gewaarborgd blijft.

[ Voor 58% gewijzigd door Verwijderd op 27-08-2003 12:36 ]


  • guyvdn
  • Registratie: Maart 2003
  • Laatst online: 18-06 20:15

guyvdn

Eagle

Group zal gewoon een variable lijken terwijl het in feite uw property is, vandaar dat de waarde van de 2 dus ook altijd hetzelfde zal zijn

To deny our own impulses is to deny the very thing that makes us human


Verwijderd

Topicstarter
Aha, de property is dus gewoon een pointer ('deurtje').
Daarom ziet het er in de wacht uit alsof ze hetzelfde zijn...
Harstikke bedankt!

EDIT: Voor de liefhebbers:
Na nog wat spitten ben ik erachter gekomen dat de zogenaamde 'variabele' die je ziet onder de class eigenlijk de uitkomst is van de functie get. Als je hier dus een ingewikkeldere functie inzet ipv de doorgeef functie die ik heb, dan staat er dus wel degelijk een andere waarde. Namelijk de uitkomst van de bewerking die wordt aangegeven onder get. Simpel voorbeeld:
Visual Basic 6:
1
2
3
Public Property Get Value() as boolean
       Value = not myValue
End Property

Wanneer myValue nu of 'True' staat geeft Value 'False' weer in de watch window.

[ Voor 74% gewijzigd door Verwijderd op 28-08-2003 08:47 ]

Pagina: 1