Class Properties

Status
Niet open voor verdere reacties.

The Mighty Atom

Terugkerende gebruiker
Lid geworden
22 mei 2008
Berichten
1.380
De laatste paar dagen ben ik aan het experimenteren met het maken van zelf gemaakte classes.
Ik weet inmiddels ook hoe class properties moet maken. Nu ben ik aan het experimenteren met een property waarin je een keuze moet maken. Kijk bijvoorbeeld naar de SizeMode property van een PictureBox, waarin je de keuze hebt tussen Normal, StretchImage, AutoSize, CenterImage en Zoom.

Zo'n soort property wil ik nu ook maken, alleen ik kom er maar niet achter hoe. Als ik zoek op Internet kom ik alleen mar properties tegen waarbij je zelf een waarde kan opgeven, bijvoorbeeld zo:

Code:
Dim NewInstance As New MyClass

NewInstance.CustomProperty = "string text hier"

Wat ik dus zoek is zoiets:

Code:
NewInstance.CustomProperty = (hier één van de keuzes)

Nadat je de = hebt getypt, moet er dus zo'n IntelliSense dinges komen met daarin mijn geprogrammeerde keuzes die bij de CustomProperty horen.

Hoe maak ik dit?
 
Ik denk dat je naar een enumeratie zoekt.
Voorbeeld:

Code:
Public Enum EnmMoveDir
    cMoveUp = 0
    cMoveDown = 1
    cMoveRight = 2
    cMoveLeft = 3
End Enum

...

    Private myMoveDir As EnmMoveDir

...

    Public Property MoveDir() As EnmMoveDir
        Get
            Return myMoveDir
        End Get
        Set(ByVal value As EnmMoveDir)
            'Snake should not turn around 180 degrees:
            Select Case value
                Case EnmMoveDir.cMoveDown
                    If myMoveDir <> EnmMoveDir.cMoveUp Then myMoveDir = value
                Case EnmMoveDir.cMoveUp
                    If myMoveDir <> EnmMoveDir.cMoveDown Then myMoveDir = value
                Case EnmMoveDir.cMoveLeft
                    If myMoveDir <> EnmMoveDir.cMoveRight Then myMoveDir = value
                Case EnmMoveDir.cMoveRight
                    If myMoveDir <> EnmMoveDir.cMoveLeft Then myMoveDir = value
            End Select
        End Set
    End Property
 
Ah zo, ik had al zo'n vermoeden, dat betekend dus dat ik goed zat... :D

Maar er verschijnen twee items in de IntelliSense:

EnmMoveDir
MoveDir

Welke van die twee is nou de daadwerkelijke property die ik moet gebruiken?

En dat = #, is dat een vereiste?

Code:
    cMoveUp [B]= 0[/B]
    cMoveDown [B]= 1[/B]
    cMoveRight [B]= 2[/B]
    cMoveLeft [B]= 3[/B]
 
Laatst bewerkt:
Maar er verschijnen twee items in de IntelliSense:

EnmMoveDir
MoveDir

- Dit komt omdat er 2 mogelijkheden zijn om het in te vullen.
Je hebt nml ook een property gemaakt die dezelfde type teruggeeft.
Als je de naam van de property verandert, verandert ook de keuze.

En dat = #, is dat een vereiste?

- Nee, dat is geen vereiste. Echter maar wel verstandig. Zet dan de None = 0. Dan weet je dat er iets fout is als er None wordt teruggegeven.
 
Ok.

Nog een vraag:

Het voorbeeld dat evertVB gaf, is een property waar je de keuze hebt uit een aantal waarden, je geeft dus niet zelf iets op, moet het dan niet een read only property zijn?
 
Die enumeratie is in feite een user-defined type.

Kijk, je hebt het type double, die kan alle gebroken of gehele getallen bevatten.
Dan heb je ook het type integer, die kan maar een beperkte set van getallen bevatten.

En nu willen wij wel eens zelf een type bedenken waar maar een hele beperkte - door onszelf bedachte set waarden aan kan worden toegvoegd.

Daar is die enumeratie voor.

Dat heeft volgens mij niets te maken met het wel of niet read-only zijn van een property.

Read-only betekent: ik kan de waarde niet wijzigen.

Enumeratie betekent: ik heb maar een hele beperkte set waarden ingevoerd die ik aan variabelen van dat 'gegevenstype' kan toekennen.

Mijn voorbeeld komt uit mijn snake-programmaatje, waarin de bewegingsrichting alleen maar omhoog, naar bendeden, links of rechts kan zijn.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan